Provided by: manpages-zh_1.6.3.6-1_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