-eq 演算子が期待どおりに動作しません。

-eq 演算子が期待どおりに動作しません。

次のプログラムがあります

read CHAR
if [[ ($CHAR -eq Y) || ($CHAR -eq y) ]]
then
  echo "YES"
elif [[ ($CHAR -eq N) || ($CHAR -eq n) ]]
then
  echo "NO"
fi

期待どおりに動作しません。 N を CHAR に渡しても、YES は印刷されます。

-eq を = に置き換えると、期待どおりに動作します。

read CHAR
if [[ ($CHAR = Y) || ($CHAR = y) ]]
then
  echo "YES"
elif [[ ($CHAR = N) || ($CHAR = n) ]]
then
  echo "NO"
fi

ここで、-eqが期待どおりに機能しない理由はわかりますか?

ベストアンサー1

この-eq構造は、整数と整数を比較するために使用されます。いいえひも。同等性チェック演算子=または==with[[..]]またはwithの使用が必要です=[..]

POSIX仕様を保証[..]し、すべてのシェルで動作する必要があります[[..]]が、周囲の検査を実行するbash/zsh特定の構成は[(..)いいえ基本的に必要です。

純粋なPOSIXはこれを行います。

read char
if [ "$char" = "Y" ] || [ "$char" = "y" ]; then
    printf 'matches Yes \n'
fi

caseもう1つのPOSIXバリアントは、ステートメントを次のように使用することです。

read char
case "$char" in
    [Yy]) echo "Yes" ;;
    [Nn]) echo "No"  ;;
    *) echo "incorrect" ;;
esac

おすすめ記事