これらの演算子がbashで使用された場合にどのように異なるか(括弧、二重括弧、括弧、および二重括弧)について少し混乱しています。
[[ , [ , ( , ((
私は人々がこのようなifステートメントでそれらを使用するのを見てきました:
if [[condition]]
if [condition]
if ((condition))
if (condition)
承認された回答:
ボーンのようなシェルでは、 if
ステートメントは通常、次のようになります
if
command-list1
then
command-list2
else
command-list3
fi
then
command-list1
の終了コードの場合に句が実行されます コマンドのリストはゼロです。終了コードがゼロ以外の場合、 else
句が実行されます。 command-list1
単純または複雑にすることができます。たとえば、演算子;
の1つで区切られた1つ以上のパイプラインのシーケンスにすることができます。 、&コード> 、
&&
、 ||コード> または改行。
if
以下に示す条件は、 command-list1
の特殊なケースです。 :
-
if [condition]
[コード> 従来の
test
の別名です 指図。[コード> /
テストコード> 標準のPOSIXユーティリティです。すべてのPOSIXシェルには組み込みがあります(ただし、POSIX²では必須ではありません)。
test
コマンドは、終了コードとif
を設定します ステートメントはそれに応じて動作します。一般的なテストは、ファイルが存在するかどうか、または1つの数値が別の数値と等しいかどうかです。 -
if [[condition]]
これは、
test
の新しいアップグレードされたバリエーションです。 ¹kshから そのbash 、 zsh 、ヤシュ 、busyboxsh また、サポートします。この[[...]]
コンストラクトは、終了コードとif
も設定します ステートメントはそれに応じて動作します。その拡張機能の中で、文字列がワイルドカードパターンと一致するかどうかをテストできます(busyboxsh ではありません)。 。 -
if((condition))
別のksh bashする拡張機能 およびzsh また、サポートします。これは算術を実行します。計算の結果、終了コードが設定され、
if
ステートメントはそれに応じて動作します。算術計算の結果がゼロ以外の場合は、ゼロ(true)の終了コードを返します。[[...]]
のように 、このフォームはPOSIXではないため、移植性はありません。 -
if(コマンド)
これは、サブシェルでコマンドを実行します。コマンドが完了すると、終了コードと
if
が設定されます。 ステートメントはそれに応じて機能します。このようなサブシェルを使用する一般的な理由は、
コマンド
の副作用を制限するためです。コマンド
の場合 シェルの環境に必要な変数の割り当てまたはその他の変更。このような変更は、サブシェルが完了した後も残りません。 -
ifコマンド
コマンドが実行され、
if
ステートメントは、その終了コードに従って機能します。