シェル(sh)で次のテストを表現するには:
if ( a == 1 && ( b == 1 || b == 2 )) { ... }
これまで私が書くことができる最も良いことは次のとおりです。
if [[ $a -eq 1 ]]; then
if [[ $b -eq 1 || $b -eq 2 ]]; then
...
fi
fi
&&と||を正しい優先順位に組み合わせる方法がわかりません。インターネット検索では何も答えられませんでした(チュートリアルでは基本的な例のみを提供します)。
これら2つを組み合わせる構文は何ですかもし一つになりますか?
ベストアンサー1
[[ ]]
BourneまたはPOSIXにはありませんsh
。実際のsh
構文では、これを行う方法はいくつかあります。
ペアのみ[ ]
を使用してください
if [ 1 -eq "$a" -a \( 1 -eq "$b" -o 2 -eq "$b" \) ]; then
# ...
fi
または-a
POSIXと-o
オプションを避ける1
if [ 1 -eq "$a" ] && { [ 1 -eq "$b" ] || [ 2 -eq "$b" ]; }; then
# ...
fi
1-a
ANDを避ける1つの理由-o
は最大の移植性です。すべてのtest
OR[
実装が4つ以上の引数を処理できるわけではありません。これは、正確に-a
ANDと連結式を使用した-o
ときに得られるものと同じです\( \)
。