[ vs [[: bash スクリプトでどのようなものを使用しますか? [コピー]

[ vs [[: bash スクリプトでどのようなものを使用しますか? [コピー]

zshのマニュアルページは、test(別名[)セクションでこの項目を使用しないことを明示的に推奨し、読者が[[可能な場合はいつでもそれを使用することをお勧めします。

これ関連部品状態:

このコマンドは、POSIX と指定された拡張を実装しようとします。残念ながら、構文には本質的なあいまいさがあります。特に、テスト演算子に似た文字列に違いはありません。標準は、少数のパラメータ(最大4つ)の問題を解決しようとします。 5つ以上のパラメータについては互換性を信頼できません。[[可能な限り、これらのあいまいさが存在しない場合は、テストの構文を使用するようにユーザーにお勧めします。

同様のbashのアドバイスを見たようですが、bashのマニュアルページを見てみると、[どの形式(または)を使用するかについての「正式な」アドバイスが見つかりませんでした。[[(おそらく私が逃したのではないでしょうか?)

理由がありますか?「古いシェル」との下位互換性に加えて[、bashスクリプトに使用されますか?それとも別の理由でbashが[持続しますか?[[その他以前のバージョンとの互換性よりも?

ベストアンサー1

しかし、まだいくつかの微妙な違いがあります。

#!/bin/bash

eg=whatever

if [ $eg == what* ]; then   # file glob test
    echo '[]'
fi

if [[ $eg == what* ]]; then   # pattern match test
    echo "[[]]"
fi      

現在のディレクトリに「whatever」というファイルがない場合、最初のテストは現在のディレクトリの内容のファイルglobと一致するためパスできませんが、2番目のテストは実際の文字列パターンの一致であるためです。

おすすめ記事