近來又得重新投入 Tcl Script 的懷抱,花了幾天重新複習了一下,手感也慢慢地回來了。透過幾天的溫習,順手做個紀錄
Variable : set / unset command
% set var 5 ;# 設定變數 var 的 vlaue 為 5
5
% puts $var ;# 列印變數 var
5
% unset var ;# 刪除變數 var
% puts $var ;# 列印變數 var, 因為不存在所以出現錯誤訊息 Can't read "var": no such variable
can't read "var": no such variable
Command Substitution
% set len [string length test123] ;# 將 [string length test123] 的結果設定到變數 len
7
上面範例中的 [string length test123] 稱為 nested command,透過 [ ] 做區分。nested command 可支援多階層(參考下面 expr command 範例),但考量到程式的可讀性,個人建議約 3~4 階層。
Math Expressions : expr command
% set xylist [list [list 10 20] [list 30 40]]
{10 20} {30 40}
% set distance [expr 100 - [lindex [lindex $xylist 0] 1]] ;#nested command example
80
另外,整數與浮點數的分別是透過"是否有加小數"來做區分,如下面犯列說明
% expr 1/3 ;# 被除數和除數皆為整數,會得到一個整數的結果
0
% expr 1/3.0 ;# 若被除數或除數之中有一個浮點數,則會得到一個浮點數的結果
0.333333333333
% expr 1.0 /3 ;# 若被除數或除數之中有一個浮點數,則會得到一個浮點數的結果
0.333333333333
若有精度(取小數點以下幾位)的需求,則可以透過 tcl_precision 這個變數來定義。請參閱下列範例
% expr 1 / 3.0
0.333333333333
% set tcl_precision 3 ;# 將精度設為小數點下三位
3
% expr 1 / 3.0
0.333
%
Backslash Substitution
Backslash, "\", 反斜線,這個符號再 tcl script 中有兩種使用方式;一種是用來顯示特殊字元,另外一種則用來分割太長的單行指令或增加程式的可讀性。
% set var 123
123
% puts "\$var = $var"
$var = 123
% set mathGrade [list [list Arthur 100] \
[list Emily 99 ] \
[list Merisa 98 ] \
[list sean 80 ]]
{Arthur 100} {Emily 99} {Merisa 98} {sean 80}
%
Double Quotes and Brace