UNIXシェルスクリプトのスイッチの場合に論理積を使用することは可能ですか。もしそうなら、どのように?
switch $var in
1 AND $var2 EQUALS 2)
some code
UNIXシェルスクリプトのスイッチの場合に論理積を使用することは可能ですか。もしそうなら、どのように?
switch $var in
1 AND $var2 EQUALS 2)
some code
次を使用できます。
case "$var1:$var2" in
(1:2) # $var1 = 1 && $var2 == 2
;;
...
esac
この場合、コロン(任意の非数字)を追加したので、値が記載されているとおりであることが合理的に確認できます。ただし、誰かがandを達成しvar1="1:2"
た場合var2=""
、テストは合格しますが、値は必要なものではありません。ただし、変数を担当している場合、これは完全に賢明な場合があります。単純な値のテストに使用する方がおそらくクリーンですが、範囲テストが必要な場合、これは、それほど明確ではなくif
、同等のものよりも簡潔になる可能性があります。if
case "$var1:$var2" in
([1-3]:[4-9]) # $var1 in {1,2,3} && $var2 in {4,5,6,7,8,9}
;;
...
esac
case "$var1:$var2" in
(*amber*:*gold*) # $var1 contains 'amber' && $var2 contains 'gold'
;;
...
esac
bash
後者を処理する機能が組み込まれている可能性があります。古いシェルはしませんでした。bash
この手法は、デフォルトでインストールされているマシン(AIX、HP-UX、Solarisなど)に移植する必要がある場合に役立つことがあります。
if
そのためのステートメントを使用する必要があります。
これを参照してください。
「いずれの場合もパターンに一致する式です。最初に一致するコマンドリストのコマンドが実行されます。「|」記号は複数のパターンを区切るために使用され、「)」演算子はパターンリストを終了します。
したがって、それぞれの場合について、評価する式ではなく、パターンを用意する必要があります。