1. ホーム
  2. バッシュ

[解決済み】シェルの等式演算子(=、==、-eq)。

2022-04-07 15:25:06

質問

とはどのような違いがあるのでしょうか。 = , ==-eq シェルスクリプトで?

という違いはあるのでしょうか?

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

という単純なものなのでしょうか。 === は、変数に数値が含まれているときのみ使用されるのですか?

どのように解決するのですか?

その逆です。 === は文字列比較のためのものです。 -eq は数値のもの用です。 -eq とは同系列のものです。 -lt , -le , -gt , -ge-ne ということです。

== はバッシュ主義です。POSIXの = . bashではこの2つは等価であり、プレーンなshでは = は、唯一動作が保証されているものです。

$ 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 スクリプトを使用することをお勧めします。 を使って [[ 代わりに . 2倍化されたフォームは、より多くの機能を持ち、より自然な構文で、あなたをつまずかせるようなゴチャゴチャは少なくなっています。の周りに二重引用符は必要ありません。 $a ひとつは

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

こちらもご覧ください。