if文の[と[[の違い]

if文の[と[[の違い]

以下のコード

if [ $a == "apple" ];
then
    echo "True"
else
    echo "False"
fi

()の場合は"True"()を出力します。ワイルドカードを使用すると比較が失敗します。"False"a="apple"a="plum"

if [ $a == "appl"* ];

[次のように置き換えられた場合[[

if [[ $a == "appl"* ]];

[これらのin a stateとin a state[[の違いは何ですかif

答え1

  • [はコマンドです(デフォルトでは command の変形test)。[[これは多くのシェルに組み込まれている機能です。
  • foo*そこに書くとき[...] ファイル名拡張子(別名ワイルドカード)は内部で発生します。[[...]] パターンマッチング発生する。
  • [[ただし、[移植性が問題になる場合は使用しないでください。
  • [[[構文の一部ではないので、 のようifに使用できます[ "$exit" = 'yes' ] && exit
  • 私が知っている限り、2番目は多くのシェルで許可されていますが、POSIXと互換性がありません[...]===

ちなみに、変数を二重引用符で囲む方法を知っていても、変数を二重引用符で囲むことをお勧めします。噴射パフォーマンスします。

関連情報