一、set & unset正則表達式
1 %set a Hello ;#定義變量 a 並賦值 2 =>Hello 3 %puts $a ;#輸出變量值 4 =>Hello 5 %set a 「Test Tcl」 ;#從新賦值 6 =>Test Tcl 7 %set a ;#輸出變量值,此時不加」$」 8 => Test Tcl 9 %puts $a ;#輸出變量值,此時要加」$」 10 =>Test Tcl 11 %puts a ;#輸出字符」a」 12 => a 13 %set b $a ;#將 a 的值賦給 b 14 =>Test Tcl 15 %puts $b 16 =>Test Tcl 17 % unset a ;#釋放變量 18 %puts $a ;#試圖輸出未定義變量的值 19 => can't read "a": no such variable
二、$ & []編程
1 %set foo oo 2 =>oo 3 %set dollar foo 4 =>foo 5 %set x $$dollar 6 =>$foo ;#只解釋一次,將「 $dollar」用 dollar 的值( foo)代替, 7 ;#命令等效爲 set x {$foo},大括阻止替換。 8 % set x {$foo} 9 =>$foo 10 %set y $x 11 =>$foo ; #一輪替換 12 13 % set b [set a 5] ;#set a 5 命令輸出的結果賦給 b 14 =>5 15 %puts $b ;#方括號命令替換,expr表示進行數學計算,外圍用方括號括起來 16 =>5 17 %set c [expr 5 * 10] ;#將乘式結果賦給 c 18 =>50
三、" " & { }app
雙引號和花括號將多個單詞組織成一個參數,也是一種替換操做。若是花括號是用作替換操做,則它會阻止內部的嵌套替換,若是花括號用作界限符,如過程定義時用作界限過程體時,不阻止替換操做,其餘還有 if 條件語句、循環語句、 switch 語句和過程聲明、數學表達式等。spa
%set s hello =>hello %puts stdout "The length of \"$s \"is [string length $s]" ;# 「string length」 命令是計算 6 Tcl 編程初步 ;#字符串長度,用反斜槓」\」來引用特殊字符。 =>The length of hello is 5 %puts stdout {The length of $s is [string length $s]} =>The length of $s is [string length $s] ;#替換操做被阻止 %set x 10 =>10 (bin) 35 % set y 20 =>20 (bin) 36 % set z [expr {$x + $y}] ;#expr 表示進行數學運算,要用[]括起來 =>30 ;#用{}來組織算術表達式,不阻止$替換操做 % if { $x == 10} { puts 「x=$x」} => x=10 ;#在條件語句中, {}用來界定條件體和執行體,不阻止內部替換
四、 \code
% set x 100 =>100 %set y "$x" =>100 %set y "\$x" =>$x ;#引用$符 %puts "he\nllo" ;#回車換行 =>he llo %puts "\a" ;#震鈴(須要在 tclsh 下運行) % set b [puts \ $y ] ;#代碼換行 =>$x
五、incrregexp
incr 命令根據指定的步長來增長或減小參數的值。當步長爲負時,減小參數值;當步長爲正
時,增長參數值。默認步長爲+1。orm
%set a 10 ; incr a =>a=11 %set a 10 ; incr a –1 => a=9
六、基本命令集blog
命令 描述
append 將值追加到字符串尾
binary 二進制字符串操做
format 字符串格式化
regexp 正則表達式(用於字符串模式匹配)
regsub 用正則表達式進行字符串模式匹配和替換
scan 字符串分解
string options 字符串操做和命令集
subst 字符替代(替代特殊字符)字符串
%set var1 Hello %set var2 World %append var1 $var2 =>HelloWorld %puts $var1 =>HelloWorld ;#var1 的內容被更改!
;#要取第 2 個變元值,即 5。位置說明符的格式爲 2$,並用\來引用符號$: % set res [format "%2\$s" 1 5 9] =>5 %puts $res =>5 % set str [format "%3\$s %1\$s %2\$s" "are" "right" "You"] => You are right
1 %format "%x" 20 2 =>14 ;# 將 20 轉換爲十六進制數 3 %format "%8x" 20 4 => 14 ;# 將 20 轉換爲十六進制數,8 位數據寬度,右對齊 5 %format "%08x" 20 6 7 =>00000014 ;#與上一命令類似,但用 0 添齊 8 %format "%-8x" 20 9 =>14 ;#寬度 8 位,左對齊 10 %format "%#08x" 20 11 =>0x000014 ;#將 20 轉換爲十六進制數,並添加前綴」0x」, 12 ;#總寬度爲 8 爲,右對齊(默認),前導空格用 0 補齊。 13 % set c [format %c%e%c 40 30000 41 ] 14 => ( 3.000000e+004) ;#%c 將整數轉換爲對應的 ASCII 字符, 40 和 41 分別對應」(「和」)」 15 % set num [scan Aa %c var1 ] 16 => 1 ;#將字符串」Aa」的第一個字符」A」轉換爲對應整數, 17 ;#並賦值給 var1 變量,返回成功轉換個數 18 % puts $var1 19 => 65 ;#字符 A 對應的整數
上例最後一個 format 格式命令中, 」%c」一個整數轉換爲對應 ASCII 字符輸出數學
%set num [scan "abcABC" "%c%c " var1 var2] => 2 %puts "$var1 $var2" => 97 98 % set num [scan "abcABC" "%c%c" ] => 97 98 %puts $num => 97 98 ;#忘記指定輸出變量的結果 ;#格式描述說明要掃描小寫的 a 到 z 區間的連續字符,用到了花括號代表是一個集合 % scan "abcABC" {%[a-z]} res => 1 % puts $res => abc % scan "ABCabc" {%[A-b]} res => 1 % puts $res => ABCab % scan "ABCab" {%[^a-b]} res =>1 ;#匹配非 a 到 b 的字符 % puts $res =>ABC % scan ABCab {%2[^a-b]} res =>1 ;#照樣能夠指定匹配字符數 % puts $res =>AB
1 %set b [binary format "s" 25664] 2 => @d ;#整數 25664 以十六進制表示爲 6440H。 「s」爲格式說明 3 ;#符,按照由低到高字節順序存儲。 4 % puts $b ;#數值被壓縮爲兩個字節,輸出的結果爲兩個壓縮字節對 5 => @d ;#應的兩個字符, @的 ASCII 碼爲 40H, d 的 ASCII 碼爲 64H 6 % binary scan $b "s" var 7 => 1 ;#返回轉換成功的次數 8 % puts $var ;#binary scan 從二進制數 b 中將數值恢復並存入變量 9 var 10 => 25664 11 % binary scan 1 c var ;#從字符 1 中恢復數值。字符 1 的 ASCII 碼=31H, 31H 對應十 12 =>1 ;#進制整數爲 49 13 % puts $var 14 => 49
subst
% subst { a=$a sum=[expr 1 + 2]} => a=foo bar sum=3 % subst { a={$a} sum={[expr 1 + 2]}} => a={foo bar} sum={3} ;#數據內部的花括號不阻止替換