2つの条件式expr1andを考えます。expr2たとえば$i -eq $j、と$k -eq $lです。これbashはさまざまな方法で書くことができます。ここに2つの可能性があります
[[ expr1 || expr2 ]]
[[ expr1 ]] || [[ expr2 ]]
ここでは2番目の方が好ましいという推奨事項を見たことがあると思いますが、これを裏付ける証拠は見つかりません。
以下は、違いがないことを示すサンプルスクリプトです。
for i in 0 1
do
for j in 0 1
do
for k in 0 1
do
for l in 0 1
do
if [[ $i -eq $j || $k -eq $l ]]; then printf "1-yes\t"; else printf "1-no\t"; fi
if [[ $i -eq $j ]] || [[ $k -eq $l ]]; then printf "2-yes\n"; else printf "2-no\n"; fi
done
done
done
done
両方の条件構文が同じ結果を生成することを示す出力:
1-yes 2-yes
1-yes 2-yes
1-yes 2-yes
1-yes 2-yes
1-yes 2-yes
1-no 2-no
1-no 2-no
1-yes 2-yes
1-yes 2-yes
1-no 2-no
1-no 2-no
1-yes 2-yes
1-yes 2-yes
1-yes 2-yes
1-yes 2-yes
1-yes 2-yes
ある構成を他の構成よりも使用する利点はありますか?
ボーナスポイントについては、同じ質問ですが、||およびを使用して複数の条件に一般化します&&。たとえば、[[ expr1 && expr2 || expr3 ]]。
[またはtest(ではない[[)OBのPOSIX仕様でtestタグ(「陳腐化した」定義にリンクされている)を検索します。ではtest、テストコマンドやテスト対象の文字列にとって意味のある構文であるかどう(かを判断できない病理学的なケースがいくつか)あります。そのため、陳腐化マーカーを無視してその構文を使用する人は、実際にはそうでなければ-時代遅れの"x$foo"慣習; と[[、それは問題ではありません。