switch

ReferenceTOPKeywords

コマンド名

switch - 与えられた値に応じて、いくつかのスクリプトの内の1つ実行します。

構文

switch ?options? string pattern body ?pattern body ...?
switch ?options? string {pattern body ?pattern body ...?}

解説

switchコマンドはstring 引数を各pattern 引数と順番にマッチします。 string とマッチするpattern を見つけると後続のbody 引数をTcl のインタプリタに再帰的に渡すことにより実行し、実行の結果を返します。 最後のpattern 引数がdefaultであれば、それはあらゆるものにマッチします。 string にマッチするpattern がなく、defaultが与えられないとき、 switchは空文字列を返します。

switchの最初のいくつかの引数が-で始まっている場合、それらはオプションとして扱われます。 次のオプションが現在サポートされています。

-exact
string とパターンの比較で厳格なマッチが使われます。これがデフォルトです。

-glob
string とパターンを比較するときにglobスタイルのマッチが行われます( string matchコマンドの実装と同じ)。

-regexp
string とパターンを比較するときに(re_syntax 参照ページに示されたように)正規表現でのマッチが行われます。
- -
オプションの終了を示します。このオプションの後ろの引数は「-」で始まっていてもstring として扱われます。

pattern body 引数のために2つの文法がサポートされています。 1番目は各パターンとコマンドに個別の引数を使います。 この形式はいくつかのパターンやコマンドで置き換えが求められているときに便利です。 2番目の形式はすべてのパターンとコマンドを一緒に1つの引数の中に置きます。 引数リストの要素がパターンとコマンドのペアで構成する適切なリスト構造を持たなければなりません。 2番目の形式は複数行に渡るswicthコマンドを構成することを容易にします。 全リストの周りの中括弧は、各行の終わりにバックスラッシュを入れることを避けるためです。 2番目の形式では、pattern 引数が中括弧の中にあるので、それらのコマンドや変数の置き換えは行われません。 これで、時には1番目の形式と2番目の形式の動きを異なるものにします。

body が"-"と指定されると、それは次のパターンのbody が、このパターンのボディとして使われることを意味します(次のパターン も"-"のボディをもつと、その次のボディが使われます。以下同様)。この特徴で、1つの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, if, regexp

キーワード

switch, match, regular expression


Copyright © 1993 The Regents of the University of California. Copyright © 1994-1997 Sun Microsystems, Inc. Copyright © 1995-1997 Roger E. Critchlow Jr.