雑多なブログ

音楽や語学、プログラム関連の話題について書いています

[: =: unary operator expected: シェルスクリプトで空文字判定でエラー

シェルスクリプトで空文字の判定を行おうと、次のようなコードを書きました。

if [ $variable = “” ]; then
    echo “空文字だから!”
fi

  これを実行してみると、$variableが未定義、もしくは空文字がセットされている時にエラーが発生した。

  [: =: unary operator expected  

未定義、もしくは空文字を代入した変数は実行時にこのように解釈されるようです。

if [ = "" ]; then
    echo "空文字だから!"
fi

したがって、この問題を避けるには

if [ "$variable" = "" ]; then
    echo "空文字だから!"
fi

という形で、ダブルクオーテーションで囲った中に、変数の値を展開する形にする必要があるようです。