Bashからif! [[ foo ]] と if [[ ! foo]]の違いは何ですか?

Bashからif! [[ foo ]] と if [[ ! foo]]の違いは何ですか?

Bashはif条件を否定するために使用されることを知っていますが、私は!次の形式を使用するコードを見ました。

if ! [[ CONDITION ]]; then
    SOMETHING
fi

この形式と以下の形式の間に違いはありますか?

if [[ ! CONDITION ]]; then
    SOMETHING
fi

Googleに試しましたが、以前の構文についてはまだ何も見つかりませんでした。

ベストアンサー1

単一条件の場合、両方とも同じです。

$ if [[ ! 1 = 1 ]]; then echo true; else echo false; fi
false
$ if ! [[ 1 = 1 ]]; then echo true; else echo false; fi
false

複数の条件をテストするときに違いがあります。

$ if  [[ ! 1 = 2 || 2 = 2 ]]; then echo true; else echo false; fi
true
$ if  ! [[ 1 = 2 || 2 = 2 ]]; then echo true; else echo false; fi
false

したがって、外部否定は結果に優先順位があります。

もちろん、条件全体に内部否定を適用することができるので、この場合の代わりに外部否定を使用することをお勧めします。

$ if  [[ ! ( 1 = 2 || 2 = 2 ) ]]; then echo true; else echo false; fi
false

おすすめ記事