1. 程式人生 > 實用技巧 >TCL之基本語法1

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就是直接呼叫外部可執行的檔案。