tcl程式設計簡介(一)
簡介tcl是一種很通用的指令碼語言,它幾乎在所有的平台上都可以解釋執行,功能強大。是tool command language的縮寫,發音為 "tickle」, 實際上包含了兩個部分:乙個語言和乙個庫。
首先,tcl是一種簡單的指令碼語言,主要使用於發布命令給一 些互交程式如文字編輯器、偵錯程式和shell。它有乙個簡單的語法 和很強可擴充性,tcl可以建立新的過程以增強其內建命令的能力。
其次,tcl是乙個庫包,可以被嵌入應用程式,tcl的庫包含了乙個分析器、用於執行內建命令的例程和可以使你擴充(定義新的 過程)的庫函式。應用程式可以產生tcl命令並執行,命令可以由使用者產生,也可以從使用者介面的乙個輸入中讀取(按鈕或選單等)。 但tcl庫收到命令後將它分解並執行內建的命令,經常會產生遞迴的呼叫。
下面簡單介紹以下txl的語法規則:
直譯器
在tcl的資料結構中的核心是tcl_interp.乙個直譯器包含了一套命令,一組變數和一些用於描述狀態的東西。每乙個 tcl命令是 在特定的tcl_interp中執行的,基於tcl的應用程式可以同時擁有幾個tcl_interp。tcl_interp是乙個輕量級的結構,可以快速的新建和刪除。
資料型別
tcl只支援一種資料結構:字串(string)。所有的命令,命令的所有的引數,命令的結果,所有的變數都是字串。請牢記這一點,所有的東西都是字串。 這是它比較有特點的方面字串有三種形式:命令(command), 表示式(expresion)和表(list)。
basic command syntax 基本語法
tcl有類似於shell和lisp的語法,當然也有許多的不同。一 條tcl的命令串包含了一條或多條命令用換行符或分號來隔開,而每一條命令包含了乙個域(field)的集合,域使用空白分開的,第乙個域是乙個命令的名字,其它的是作為引數來傳給它。
例如:set a 22 //相當於c中的 a=22 a是乙個變數這條命令分為三個域:1: set 2: a 3: 22 set使用於設定變數的值的命令,a、20 作為引數來傳給它,a使它要操作的變數名,22是要付給的a值。
tcl的命令名可以是內建的命令也可以是使用者建的新命令,如果是使用者使用者建的新命令應用程式中用函式tcl_createcommand來建立。所有的引數作為字串來傳遞,命令自己會按其所需來解釋的引數的。命令的名字必須被打全,但 tcl直譯器找不到一同名的命令時會用 unknown命令來代替。
在很多場合下,unknown 會在庫目錄中搜尋,找到乙個的話,會自動生成乙個tcl命令並呼叫它。unknown經常完成縮略的命令名的執行。但最好不要使用。
注釋
和shell很象,第乙個字母是"#"的tcl字串是注釋。
其他細節規則
grouping arguments with double-quotes 用雙引號來集群引數,目的在於使用有空白的引數。
例如:
set a "this string contains whitespace"
如夠乙個引數一雙引號來開始,該引數會一直到下乙個雙引號才結束。其中可以有換行符和分號。
variable substitution with $ 用美元符進行變數替換說白了就是引用該變數。
如:
set a hello
set b $a // b = "hello" 實際上傳給set命令的引數
//是b,"hello"
set c a // b = "a"
command substitution with brackets 命令子替換(用方括號)
例如:
set a [set b "hello"]
實現執行 set b "hello" 並用其結果來替換源命令 中的方括號部分,產生一條新命令
set a "hello" //"hello" 為 set b "hello" 的返回值
最終的結果是b="hello" a="hello"
當命令的乙個子域以方括號開始以方括號結束,表示要進行乙個命令子替換。並執行該子命令,用其結果來替換原命令中的方括號部分。方括號中的部分都被視為tcl命令。
set a xyz[set b "abc"].[set c "def"]
//return xyzabcdef
backslash substitution 轉移符替換
轉移符時間不可列印字元或由它數意義的字元插入進來。這一概念與c語言中的一樣。
backspace (0x8).
f form feed (0xc).
newline (0xa).
carriage-return (0xd).
tab (0x9).
v vertical tab (0xb).
right brace (`}").
[ open bracket (`[").
] close bracket (`]").
$ dollar sign (`___fckpd___4quot;).
sp space (` "): does not terminate argument.
; semicolon: does not terminate command.
" double-quote.
grouping arguments with braces 用花擴括號來集群引數
用花擴括號來集群引數與用雙引號來集群引數的區別在於:用花擴括號來集群引數其中的三種上述的子替換不被執行。而且可以巢狀。
例如:
set a }//set收到倆個引數 a "xyz a "
eval //eval收到乙個引數 "set a 22
set b 33"
命令綜述
1.乙個命令就是乙個字串(string)。
2.命令是用換行符或分號來分隔的。
3.乙個命令由許多的域組成。第乙個於是命令名,其它的域作為引數來傳遞。
4.域通常是有空白(tab橫向製表健 space空格)來分開的。
5.雙引號可以使乙個引數包括換行符或分號。三種子替換仍然發生。
6.花括號類似於雙引號,只是不進行三總體換。
7.系統只進行一層子替換,機制替換的結果不會再去做子替換。而且子替換可以在任何乙個域進行。
8.如果第乙個非控字元是`#", 這一行的所有東西都是注釋。
表示式
對字串的一種解釋是表示式。幾個命令將其引數按表示式處理,如:expr、for 和 if,並呼叫tcl表示式處理器(tcl_exprlong, tcl_exprboolean等)來處理它們。其中的運算子與c語言的很相似。
!
邏輯非
* / % + -
<< >>
左移 右移 只能用於整數。
< > <= >= == !=
邏輯比較
& ^ |
位運算 和 異或 或
&&' '
邏輯"和" "或"
x ? y : z
if-then-else 與c的一樣
tcl 中的邏輯真為1,邏輯假為0。
一些例子:
5 / 4.0
5 / ( [string length "abcd"] + 0.0 )
計算字串的長度 轉化為浮點數來計算
"0x03" > "2"
"0y" < "0x12"
都返回 1
set a 1
expr $a+2
expr 1+2
都返回 3
Tcl程式設計簡介(三)
tcl程式設計簡介 三 tcl 內建命令 內建的命令 tcl提供了下面描述的內建函式。其中 表示引數不定具體有 將那一大堆value附加到varname後面。如果變數不存在,會新建乙個。例子 array命令 array subcommand arrayname array subcommand ar...
tcl語言簡介1
tcl簡介 一 tcl 語法 tcl 語法 tcl是一種很通用的指令碼語言,它幾乎在所有的平台上都可以釋執行,其強大的功能和簡單精妙的語法會使你感到由衷的喜悅,這片文章對 tcl有很好的描述和說明。極具可讀性,我並不是原封不動的翻譯而是加上了一些自己的體會和例子,如有錯誤請指正。如果你看起來很吃力,...
shell程式設計 簡介(一)
1 shell概念 shell是乙個用c語音編寫的程式,他是使用者使用linux的橋梁 shell既是一種命令語音,又是一種程式設計語音 shell是指一種應用程式,這個應用程式提供乙個介面,使用者通過這個介面訪問作業系統核心的服務 2 shell指令碼 shell指令碼全稱是shell scrip...