シェル スクリプトにおける=
、、==
の違いは何ですか?-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
参照: