switch -
依據一個給定的值對多個指令碼中的一個進行求值
switch ?
options?
string pattern body ?
pattern body
...?
switch ?
options?
string {
pattern body ?
pattern
body ...?}
switch 命令依次針對每個
pattern
(模式)引數匹配它的
string
引數。如果它發現一個
pattern 匹配
string,則立即透過把跟隨在(這個模式)後面的
body 引數遞迴的傳遞給
Tcl
直譯器來求值它,並返回這次求值的結果。如果最後的
pattern 引數是
default,則它匹配所有的東西。如果沒有
pattern 引數匹配
string
並且沒有給出預設,則
switch
命令返回一個空串。
如果給
switch
的最初的引數以
-
開始,則它們被作為選項來對待。當前支援下列選項:
- -exact
- 當與一個模式比較
string
的時候,使用精確匹配。這是預設的。
- -glob
- 當與一個模式比較
string
的時候,使用萬用字元式樣的匹配(與
string match
命令所實現的相同)。
- -regexp
- 當與一個模式比較
string
的時候,使用正則表示式匹配(在
re_syntax
參考頁中描述)。
- --
- 選項結束的標誌。此後的引數即使以
- 開始仍被作為 string
來對待。
為
pattern 和
body
引數提供了兩個語法。第一個是對於每個模式和命令使用一個獨立的引數;如果在一些模式或命令上需要替換,則這種形式是很方便的。第二種形式是把所有的模式和命令放在一起作為一個單一的引數;這個引數必須有正確的列表結構,它的元素是模式和命令。第二種形式適合於構造多行
switch
命令,因為花括號包圍著所有元素,所以沒有必要在每行結束之處包含一個反斜槓。
在第二種形式中因為
pattern引數在花括號中,所以在它們上不進行命令和變數替換;這使得第二種形式的行為在一些情況下與第一種形式不同。
如果指定一個
body
為``
-'',則意味著給下一個模式的
body
也被用於這個模式(如果下一個模式也有一個執行體“
-”則使用它後面的這個執行體,以此類推)。這個特徵使在多個模式之間共享一個單一的
body 成為可能。
在
switch
命令放置註釋要注意。註釋只能放置在一個模式的執行體中,而不能與模式混合。
下面是
switch
命令的一些例子:
switch abc a - b {format 1} abc {format 2} default {format 3}
將返回
2,
switch -regexp aaab {
^a.*b$ -
b {format 1}
a* {format 2}
default {format 3}
}
將返回
1, 而
switch xyz {
a
-
b
{
# Correct Comment Placement
format 1
}
a*
{format 2}
default
{format 3}
}
將返回
3.
for(n),
if(n),
regexp(n)
switch, match, regular expression
寒蟬退士
2001/11/15
http://cmpp.linuxforum.net
本頁面中文版由中文 man
手冊頁計劃提供。
中文 man 手冊頁計劃:
https://github.com/man-pages-zh/manpages-zh