【メッセージ具体例紹介】単項演算子が予期されます【シェルスクリプト】

雑学

備忘録になります。以下のようなケースでエラーメッセージが発生します。

ケース1

# cat wrk.sh
VAR="A"
if [ -eq $VAR ] ; then
    echo "AAA"
fi

# ./wrk.sh
./wrk.sh: 2 行: [: -eq: 単項演算子が予期されます

単項演算子が入るところに比較演算子を入れてしまったケースです。

修正後

# cat wrk.sh
VAR="A"
if [ -n $VAR ] ; then
    echo "AAA"
fi

# ./wrk.sh
AAA

ケース2

# cat wrk.sh
VAR = "A"
if [ $VAR = "A" ] ; then
    echo "AAA"
fi

# ./wrk.sh
./wrk.sh: 行 1: VAR: コマンドが見つかりません
./wrk.sh: 2 行: [: =: 単項演算子が予期されます

変数の代入に失敗する事により、$VARに値が存在せず、[ = “A”]という形が成立してしまったケースです。

正しく$VARに値が入ればエラーになりません。

# cat wrk.sh
VAR="A"
if [ $VAR = "A" ] ; then
    echo "AAA"
fi

# ./wrk.sh
AAA

前段のプログラムの流れでCOUNT変数に値が入らない可能性がある場合、COUNT変数をダブルクォーテーション(“)で囲ってあげる必要があります。

# cat wrk.sh
VAR=
if [ "$VAR" = "A" ] ; then
    echo "AAA"
else
    echo "BBB"
fi

# ./wrk.sh
BBB

関連リンク