7

スクリプトにオプションの大規模なリストが必要です。ユーザーは、これらのオプションの1つにのみ一致する入力を提供します。複数の異なるオプションで同じコマンドを実行できるようにしたいのですが、ORを機能させることができないようです。以下は私がそれがどのように見えるべきだと思ったかです、aまたはbラインを機能させる方法についてのアイデアはありますか?

switch -glob -- $opt {
   "a" || "b" {
      puts "you selected a or b, probably not both"
   }
   default {
      puts "Your choice did not match anything"
   }
}
4

3 に答える 3

16

Tclマニュアル-で説明されているように、ケースの本体として使用して、次の本体にフォールスルーすることができます。

本文が「-」で指定されている場合は、次のパターンの本文もこのパターンの本文として使用する必要があることを意味します(次のパターンにも「-」の本文がある場合は、その後の本文が使用され、すぐ)。この機能により、複数のパターン間で単一のボディを共有することが可能になります。

また、オプションが連結文字の大きな文字列である場合は、オプションパターンをワイルドカードでブックエンドする必要があります。そうしないと、ケースが一致するoptのは、オプションが1つしかない場合のみです。

switch -glob -- $opt {
   "*a*" -
   "*b*" {
      puts "you selected a or b, probably not both"
   }
   default {
      puts "Your choice did not match anything"
   }
}
于 2013-03-05T03:09:05.267 に答える
2

これも動作します:

switch -regexp -- $opt {
   a|b {
      puts "you selected a or b, probably not both"
   }
   default {
      puts "Your choice did not match anything"
   }
}

注意:「a|b」の間にスペースはありません

于 2016-09-09T08:37:17.437 に答える
1

2つの方法があります。スイッチのドキュメントの例から:「グロブマッチングとフォールスルーボディを使用することは、交互に正規表現を書く代わりになります...」

于 2013-03-05T02:18:13.110 に答える