質問: bash演算子の違いは何ですか[[vs [vs(vs((? これらの演算子をbashで使用した場合の動作の違い(括弧、二重括弧、括弧、二重括弧)について少し混乱しています。[[ , [ , ( , (( 私は人々がこのようなif文でそれらを使用するのを見ました:if [[condition]] if [condition] if ((condition)) if (condition)
回答: ifステートメントは通常、次のようになります。_if commands1 then commands2 else commands3 fi __commands1_の終了コードがゼロの場合、then句が実行されます。終了コードがゼロ以外の場合、else句が実行されます。 _commands1_は単純または複雑です。たとえば、演算子_;_、_&_、_&&_、または_||_のいずれかで区切られた1つ以上のパイプラインのシーケンスにすることができます。以下に示すif条件は、_commands1_の特殊なケースです。 _if [ condition ]_ これは従来のshell testコマンドです。すべてのposixシェルで使用できます。 testコマンドは終了コードを設定し、ifステートメントはそれに応じて動作します。典型的なテストは、ファイルが存在するか、ある番号が別の番号と等しいかどうかです。 _if [[ condition ]]_ これはkshからのtestの新しいアップグレードされたバリエーションで、そのbashおよびzshもサポートしています。このtestコマンドも終了コードを設定し、ifステートメントはそれに応じて動作します。その拡張機能の中で、文字列が正規表現に一致するかどうかをテストできます。 if ((condition)) bshおよびzshもサポートする別のksh拡張機能。これは算術を実行します。演算の結果、終了コードが設定され、ifステートメントがそれに応じて機能します。算術計算の結果がゼロ以外の場合、ゼロ(true)の終了コードを返します。 _[[...]]_と同様に、このフォームはposixではないため、移植できません。 if (command) これはサブシェルでコマンドを実行します。コマンドが完了すると、終了コードが設定され、ifステートメントがそれに応じて動作します。 このようなサブシェルを使用する一般的な理由は、commandがシェルの環境への変数の割り当てやその他の変更を必要とする場合に、commandの副作用を制限するためです。このような変更は、サブシェルの完了後は残りません。 _if command_ コマンドが実行され、ifステートメントがその終了コードに従って動作します。