Scroll to navigation

Tcl(7tcl) Tcl Built-In Commands Tcl(7tcl)


NAME

Tcl - 語言語法總結.

描述 DESCRIPTION

下面的規則定義 Tcl 語言的語法和語義:

[1]
一個 Tcl 腳本是一個包含一個或多個命令的字符串。除了象後面描述的那樣被引用(quote)之外,分號(Semi-colon)和換行(newline)是命令分隔符。除了被引用(quote)之外,右方括號(Close bracket)在命令替換期間是命令終結符(見後)。

[2]
命令的求值分兩步。 首先,Tcl 解釋器把命令分解成字 (words) 並按下面描述的那樣完成替換。對所有命令都以同樣的方式進行替換。第一個字用於定位完成這個命令的一個命令過程,接着命令的所有的字被傳遞給命令過程。命令過程以它喜歡的任何方式自由的解釋命令的字,如一個整數、變量名、列表、或 Tcl 腳本。不同的命令以不同的方式解釋它們的字。

[3]
一個命令的字(word)由白空格(不包括作爲命令分隔符的換行)來分隔。

[4]
如果一個字的第一個字符是雙引號 (``"'',double-quote) 則字終結於下一個雙引號字符。如果是分號,右方括號,或白空格字符(包括換行)出現在引號之間則被作爲普通的字符對待幷包含在字裏。象下面描述的那樣,在引號之間的字符上進行命令替換、變量替換、和反斜槓替換。雙引號不作爲字的一部分而保留。

[5]
如果一個字的第一個字符是左花括號 (“{”,open brace) 則字終結於相匹配的右花括號 (“}”,close brace)。花括號在字中嵌套: 對於每個增加的(additional)左花括號都必須有一個增加的右花括號(但是,如果 在一個字中的左括號或右括號被用一個反斜槓引用起來則在匹配右花括號時不計在內)。除了下面描述的反斜槓-換行替換之外,在花括號之間的字符上不進行替換,對分號、換行、右方括號、或白空格不做特殊的解釋。字由外側的花括號之間的字符精確的組成,不包括花括號自身。

[6]
如果一個字包含一個左方括號 (“[”,open bracket ) 則 Tcl 進行命令替 換 (command substitution)。爲此將遞歸調用 Tcl 解釋器來把左方括號後 面的字符作爲一個 Tcl 腳本處理。腳本可以包含任意數目的命令並且必須用一個 右方括號 (“]”,close bracket) 來終結。腳本的結果(例如,最後的一條命令的結 果)將被替換到字中方括號和它們中間所有字符的位置上。在一個單一的字中可以 有任意數目的命令替換。在由花括號包起來(enclose)的字上不進行命令替換。

[7]
如果一個字包含一個美元符(``$'')則 Tcl 進行變量替換 (variable substitution): 字中的美元符號和跟隨的字符被一個變量的值所替換。接受下面幾種形式(form)的變量替換:

$name
Name 是一個標量(scalar)變量的名字;名字終結於任何不是字母、數字、或下劃線(underscore)的字符。

$name(index)
Name 給出一個數組變量的名字,index 給出在這個數組中的一個元素的名字. Name 只能包含字母、數字、和下劃線。index 的字符將被進行命令替換、變量替換、和反斜槓替換。

${name}
Name 是一個標量( scalar)變量的名字。它可以包含除了右括號之外的任何字符。

一個單一的字中可以有任意數目的變量替換。在由花括號包起來(enclose)的字上不進行命令替換。

[8]
如果在一個字中出現一個反斜槓(“\”)則發生反斜槓替換 (backslash substitution)。除了下面描述的這些情況之外,反斜槓 (backslash)被刪除 (drop),跟隨的字符被作爲普通字符對待。這就允許在字中包含象雙引號、右方括 號、和美元符號等字符而不觸發特殊的處理。下表列出的要特殊處理的反斜槓序列 ,跟着的是每個序列被替換成的值。

\a
聲音警告 (振鈴) (0x7).

\b
退格 (0x8).

\f
換頁 (0xc).

\n
換行 (0xa).

\r
回車 (0xd).

\t
跳格(Tab) (0x9).

\v
縱向跳格 (0xb).

\<newline>whiteSpace
一個單一的空格字符替換反斜槓、換行和在換行後面的所有空格和跳格。這個反斜槓序列是唯一一個在命令被實際分析之前在一次獨立的預處理(pre- pass)中被替換的。這意味着即使在花括號之間這個替換也發生,並且不在花括號和引號之間時作爲結果的空格被作爲一個字分隔符對待。

\\
反斜槓 (``´').

\ooo
數字ooo(它們中的一個、兩個、或三個)給出一個八進制數,是要插入的 Unicode 字符的八位值。 Unicode 字符的高位(upper)將是 0.

\xhh
十六進制數 hh 給出要插入的 Unicode 字符的八位值。可以提供任意數目的十六進制數字 ;但除了最後兩位之外都被忽略(結果總是一個一字節的數量)。Unicode 字符的高位(upper)將是 0.

\uhhhh
十六進制數 hhhh (它們中的一個、兩個、三個、或四個)給出要插入的 Unicode 字符的十六位值。

除了前面描述的反斜槓-換行,在由花括號包起來(enclose)的字上不進行反斜槓替換。

[9]
如果一個升音符 “#” (sharp / hash) 出現在 Tcl 希望是一個命令的第一個字的地方(point),則升音符和其後面跟隨的、一直到下一個換行的所有字符,被作爲一個註釋對待並被忽略。註釋字符只有出現在一個命令開始時纔有意義(significance)。

[10]
每個字符作爲建立的一個命令的某個字的一部分,被 Tcl 解釋器精確的處理一次。例如,如果發生了變量替換則在變量的值上不進行進一步的替換;值被原封不動的(verbatim)插入字中。如果發生了命令替換則嵌套的命令被對 Tcl 解釋器的遞歸調用整個的處理;在做遞歸調用之前不進行替換並且對嵌套的腳本的結果不進行額外的(additional)替換。

[11]
替換不影響一個命令的字邊界(boundary)。例如,即使變量的值包含空格,在變量替換期間變量的整個的值成爲一個單一的字的一部分。

[中文版維護人]

寒蟬退士

[中文版最新更新]

2001/06/21

《中國 Linux 論壇 man 手冊頁翻譯計劃》:

http://cmpp.linuxforum.net

本頁面中文版由中文 man 手冊頁計劃提供。
中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh
8.1 Tcl