Provided by: manpages-zh_1.6.3.3-2_all bug

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