-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또 다른 POSIX 변형은 명령문을 다음과 같이 사용하는 것입니다 .

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

답변2

-eq숫자 비교 연산자입니다. 문자열에는 =( =또는 AND)를 사용하세요 .==[[ ...]]

자세한 내용은 설명서에서 확인할 수 있습니다 man bash.

유용할 수 있는 또 다른 도구는 다음과 같습니다.https://shellcheck.net

관련 정보