2 Tcl輸出、賦值與替換
2.1 puts
Tcl的輸出命令是puts,將字串標準輸出channelled。語法中兩個問號之間的引數為可選引數。
# 例1
puts hello
# 輸出
hello
# 例2
puts -nonewline "hello hello"
# 輸出
hello hello
- 如果輸出一段有空格的文字,則要用雙引號("")或花括號({})起來。
- -nonewwhile選項告訴puts不輸出回車換行。
注意:雙引號和花括號的作用是將多個片語織成一個變元,但是""和{}是由區別的。""在進行替換操作的時候,前者允許替換操作發生;{}會阻止替換。
2.2 set
set varName [value]
unset vaName
- set:變數定義和賦值命令,不必制定變數值得型別,因為變數值得型別只有一種--字串。在為變數進行賦值的時候,會為變數開闢一段記憶體空間來儲存變數值
- set VarName不跟變數的值,如果變數已經定義,則返回變數的值,效果和puts相同;變數不存在會返回錯誤資訊。相當於查詢的作用。
- unset與set的作用相反,它取消變數的定義,並釋放變數所佔的記憶體空間
- 透過前置的“$”符,可以引用變數的值(替換)。
set a Hello # 定義變數a併為其賦值
puts $a # a=Hello
set a "Test Tcl" # 重新給a賦值
set a # 輸出Test Tcl
puts a # 輸出字元a
set b $a # 定義變數b,並將a的值賦值給b b=Test Tcl
puts $b # b = Test Tcl
unset a # 釋放變數
puts $a # 試圖輸出未定義的變數值,會進行輸出
- puts $a由兩步完成:首先用a的值替換$a,替換後的命令變為puts {Test Tcl},然後輸出字串。也就是說先替換後輸出。
- 陣列定義在後面進行介紹。
2.3 替換
2.3.1 $
$實現引用替換,用來引用引數值。
tcl在使用$進行引用替換的時候,只會進行一次解釋,巢狀使用$$xxxx,只有一個起作用。
set foo oo
set dollar foo
set x $$dollar # x = $foo
set y {$foo} # y = $foo {}阻止替換
set z $x # z = $foo
- $$dollar,將$dollar用dollar的值foo進行替換,前面的$不起作用,作用字元輸出。
2.3.2 []
方括號[]書寫完整的命令替換,[]中的執行後,返回結果。
set b [set a 5] # set a 5命令輸出的結果賦值給b b=5
puts b # b = 5
set c [expr 5*10] # 將乘式的結果賦值給c
puts c # c = 50
2.3.3 ""和{}
""和{}將多個單詞阻止在一起組成一個引數,也是一種替換操作。一般在""內進行正常替換,在{}中的替換可能被阻止。當{}用於組織算數表示式、if條件和函式內執行體的程式碼塊的時候,不會阻止替換。
set s hello
puts stdout "The length of\"$s\" is [string length $s]"
=>The length of hello is 5
# ""內再使用雙引號的時候要使用跳脫字元。
# string length $s 計算字串s的字串長度
puts stdout {The length of $s is [string length $s]} # 替換操作被阻止
=>The length of $s is [string length $s]
set x 10
set y 20
set z [expr{$x + $y}]
=>30
if{$x == 10} {puts "x = $x"}
=>x=10
- expr表示進行數學運算,要用[]括起來
- 用{}來組織算數運算表示式,不阻止$替換操作
- 在條件語句中,用{}來界定條件體和執行體,不阻止內部的替換
2.3.4 \
反斜槓“\”的作用是引用特殊字元或者續行。
應用特殊字元的操作是告訴TCl直譯器需要使用一些特殊的字元,如$符或者完成特定功能比如\n,\t,\b.....,相當於跳脫字元的作用。
如果一條語句過長,可以使用“\”,將一行語句分為多行進行書寫。
set x 100
set y $x # y = 100
set z "\$x" # z = $x \$表示告訴tcl使用$符號
puts "he \nllo" # \n換行
=>he
llo
puts "\a" # 振鈴
set b [puts \
$y]
注意:當用set命令為引數,賦值,並""用作續行符的時候,不要在反斜槓後面同一行上輸入任何符號,包括空格和製表符。否則反斜槓(\)就起不到續行的功能,容易引起錯誤。