이 명령이 rnum이 정수인지 확인하는 방법을 설명해주세요.

이 명령이 rnum이 정수인지 확인하는 방법을 설명해주세요.

$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

관련 정보