TCL之基本語法1
TCL之基本語法1
1:set and puts
set就是變數宣告,這個宣告在需要使用的指令下會自動執行,不會出現沒有宣告的錯誤。但是對於puts這類定向訪問的是不能沒有宣告的。這裡簡單理解TCL中的變數:以字串的形式存在,具體的值由$符號訪問。訪問之前必須已經有宣告。
set x 0 puts $x puts x
兩個puts都是可以顯示結果的,掐前一個是值,後一個是字元。
2:exprand[]
TCL中的指令長度是確定的,由關鍵字決定。每個引數使用空格區分。如果需要將指令內的某個引數巢狀其他指令,則需要使用[]來確認巢狀指令的範圍。expr是取算數計算的結果的指令,引數就是算數表示式。
set x 0 set x [expr $x+1] puts $x
最後的結果是1,第二句語句就是將x加1.
3:list and {}
前面介紹如何嵌入指令,同樣含有空格的字串也是需要嵌入的(某些引數需要帶有空格及特殊字元的字串作為引數)。使用{}可以將內部的內容轉化為特殊字串變數,在TCL中為list型變數。list作為引數時,內部的符號都是由對應指令控制的,而不是按照指令解釋。這裡有許多對list操作的指令,以後有時間詳細分析。
set x {1 2 3 {1 2} 2 {4 5}} puts $x
x的值就是後面的一串list型變數
4:if and elseif
TCL中的條件判斷語句。
if { $x==0 } { set x 1 puts $x } elseif { $x==1 } { set x 2 puts $x } elseif { $x==2 } { set x 3 puts $x } elseif { $x<11 } { set x [expr $x+1] puts $x
具體的形式和C語言相似,注意引數只有兩個,每個都用{}宣告,且引數間使用空格區分。
5:while and for
TCL中的迴圈語句,引數位置和C語言相似,宣告按照TCL語法即可。
while { $x<10 } {if { $x==0 } { set x 1 puts $x } elseif { $x==1 } { set x 2 puts $x } elseif { $x==2 } { set x 3 puts $x } elseif { $x<11 } { set x [expr $x+1] puts $x } } for { set i 0 } { $i<10 } { incr i 1 } { puts i=$i }
while兩個引數,第一個迴圈條件,第二個執行體。for有四個引數,第一個初始執行體(開始前執行一次),第二個迴圈條件,第三個條件執行體,第四個迴圈執行體。每個引數按照C語言中的for可以完全對應。
6:foreach
list迴圈結構,這是比較特殊的迴圈。其判斷條件是list型變數的長度及讀取尺度,執行體和for是一樣的。第一個引數是讀取長度及快取變數,第二個是待讀取的list型變數。第三個是執行體。
set b " " set a {10 100 2300 {1} } foreach i $a { set b [linsert $b 0 $i] puts $i puts $b } set x {} foreach {i j} {a b c d e f} { lappend x $j $i puts x=$x }
第一個foreach中,讀取長度是1(i只有一個字元),快取變數是i,待讀取的list(可以直接寫,也可以是已經存在的,已存的需要加$讀取符),執行的就是最後的引數的內容。linsert是字元插入指令,這裡暫時不解釋。
第二個就是將長度換成2,快取變數變成i和j,其他的是一樣的。
7:eval and source
eval是命令解讀指令。source是呼叫外部檔案的指令。
#!/bin/sh # eval_source.tcl \ exec tclsh "$0" ${1+"$@"} eval set b 2 ;set b 4 puts $b set cmd "puts \"I love you \"" eval $cmd source D:/Library/TCL_design/T1_workspace/A3_string.tcl
這裡cmd宣告為字串(真正的和C語言中一樣的字串,注意轉義字元\的使用),可以將命令轉化為字串,由eval解釋執行。這裡可以使用其他系統命令。source就是直接呼叫外部可執行的檔案。