シェル等価演算子 (=、==、-eq) 質問する

シェル等価演算子 (=、==、-eq) 質問する

シェル スクリプトにおける=、、==の違いは何ですか?-eq

以下の間に違いはありますか?

[ $a = $b ]
[ $a == $b ]
[ $a -eq $b ]

変数に数字が含まれている場合にのみ、=と が使用されるということでしょうか?==

ベストアンサー1

=および は==文字列比較用で、
-eqは数値比較用です。は、、、、、およびと
-eq同じファミリーです。-lt-le-gt-ge-ne

==bash に固有のものです (sh (Bourne シェル) には存在しません)。=互換性のためには POSIX の使用が推奨されます。bash では 2 つは同等であり、sh では=1 つだけが機能します。

$ a=foo
$ [ "$a" = foo ]; echo "$?"       # POSIX sh
0
$ [ "$a" == foo ]; echo "$?"      # bash-specific
0
$ [ "$a" -eq foo ]; echo "$?"     # wrong
-bash: [: foo: integer expression expected
2

(注意: 変数の展開は必ず引用符で囲んでください。上記の二重引用符は省略しないでください。)

スクリプトを書いているなら#!/bin/bash[[代わりに使用二重角括弧[[...]]形式には、より多くの機能、より自然な構文、そしてつまずくような落とし穴が少なくなります。たとえば、 の周囲に二重引用符は不要になります$a

$ [[ $a == foo ]]; echo "$?"      # bash-specific
0

参照:

おすすめ記事