bash で複雑な式をテストするにはどうすればよいですか?

bash で複雑な式をテストするにはどうすればよいですか?

私は次のような単純な表現しかできません1=1 and 0=1

test 1 = 1 -a 0 = 1 

しかし、次のような複雑な式はどのように行うのでしょうか1=1 and (0=1 or 1=1)?

答え1

複数のテスト呼び出しを使用します:

test 1 = 1 && test 0 = 1 -o 1 = 1

または [[:

[[ 1 = 1 && (0 = 1 || 1 = 1) ]]

答え2

testまたは[...を使用することもできます]が、括弧をエスケープする必要があり、用語をスペースで区切る必要があることに留意してください。

if [ \( a = a \) -a \( a = b -o b = b \) ]
then echo Yes
else echo No
fi

それは私にとっては「はい」です。ただし、通常は代わりに Bash および Korn シェルの[[...]]演算子を使用する方が簡単です。それほど多くのエスケープを行う必要はありません。

答え3

質問にはすでに回答されていますが、検討できる(あるいは却下できるかもしれない)スタイルのヒントがいくつかあります:

あなたがそれを書いている人で、それがわかりにくいと感じている場合は、次のことを行ってください。

  • 必要でなくても () を追加して使用すると、より明確になる可能性があります。
  • また、多数の and ステートメントの代わりにネストされたループを使用することもできます。

答え4

Florian は上でほぼ正しいですが、bash には算術展開もあり、変数を比較するときに少し便利であることに留意してください。

見るここ詳細については。

関連情報