1. ホーム
  2. shell

[解決済み] シェルスクリプトで NULL 値と文字列を比較する際に単項演算子が期待される

2022-02-25 08:47:49

質問

私は2つの変数を持っています

var=""
var1=abcd

以下は、私のシェルスクリプトのコードです。

if [ $var == $var1 ]; then
  do something
else
  do something
fi

このコードを実行すると、警告が表示されます。

[: ==: unary operator expected

どうすれば解決できますか?

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

の値が小さいので $var は空文字列なので、これ。

if [ $var == $var1 ]; then

は、このように展開されます。

if [ == abcd ]; then

というのは構文エラーです。

引数を引用する必要があります。

if [ "$var" == "$var1" ]; then

を使用することもできます。 = よりも == これはオリジナルの構文で、少し移植性が高いのです。

bashを使用している場合は、このように [[ の構文は、引用符を必要としません。

if [[ $var = $var1 ]]; then

その場合でも、変数の参照を引用して、引用符を付けても問題ない。

if [[ "$var" = "$var1" ]]; then

を思い出そうとする読者の手間を省くことができるかもしれません。 [[ ... ]] はそれらを必要とします。