$rnum
숫자인지 테스트하기 위해 쉘 스크립트에서 다음과 같은 구성을 본 적이 있습니다 .
if ! [ "$rnum" -eq "$rnum" ] 2> /dev/null; then
echo "rnum is not a number"
exit 1
fi
작동하는 것 같지만 왜 그런지 이해가 안 됩니다. 무언가가 그 자체와 같은지 테스트하는 것이 항상 정확해야 하지 않나요? 이것이 어떻게/왜 작동하나요?
답변1
Ulrich Schwarz는 자신의 의견에서 이 질문에 답했습니다. 그냥 무시 하고 정수가 아닐 때 무슨 일이 일어나는지 2>/dev/null
살펴보세요 . 대화형 세션에서 작성된 $rnum
다음 예제를 고려해보세요 .bash
$ rnum='foo'
$ [ "$rnum" -eq "$rnum" ]
-bash: [: foo: integer expression expected
$ echo $?
2
값이 정수인지 테스트하는 다른 방법을 찾고 있다면 Prashant Band가 방법을 제시했습니다. 그러나 나는 보다 이식성이 뛰어난 솔루션( =~
운영자에 종속되지 않는 솔루션)을 선호합니다.
expr "X$rnum" : 'X[-+]\{0,1\}[0-9]\{1,\}$' >/dev/null || {
echo 'rnum is not a number' >&2
exit 1
}
-0
, +0
, 와 같은 홀수 값은 000
정수로 처리됩니다. 그러나 이는 질문에서 제안된 원래 구성을 사용하여 얻는 것과 동일한 동작입니다.
답변2
이 스크립트는 숫자인지 확인합니다.
num=123
if [[ "$num" =~ ^[0-9]+$ ]]
then
echo "It is Number"
fi