Tcl程式設計簡介(一)

2021-04-12 14:51:23 字數 4141 閱讀 4774

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...