다음 프로그램이 있습니다
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