IT박스

기본에 비해 너무 큰 값 (오류 토큰은 "08"임)

itboxs 2020. 12. 12. 10:17
반응형

기본에 비해 너무 큰 값 (오류 토큰은 "08"임)


이 질문에 이미 답변이 있습니다.

여기서 내 문제는 if 문에서 단일 대괄호 [] 및 이중 대괄호 [[]] 사용의 차이점을 찾는 것입니다.

#!/bin/bash
vara=08;
varb=10;

## single bracket in if statment is working.
if [ $vara -lt $varb ]; then
echo "yes";
else
echo "no";
fi


## double brackets in if statment is not working; throwing an error like below.
## [[: 08: value too great for base (error token is "08")
if [[ $vara -lt $varb ]]; then
echo "yes";
else
echo "no";
fi

쉘은 0으로 시작하는 08을 8 진수로 해석하려고합니다. 그러나 10 진수 8은 8 진수 010이므로 숫자 0-7 만 8 진수로 허용됩니다. 따라서 08은 유효한 숫자가 아니므로 오류가 발생합니다.

단일 대괄호는 sh와의 일종의 "호환성 모드"이며 sh는 8 진수에 대해 알지 못합니다.

따라서 단일 대괄호를 사용하는 경우 "010"은 10으로 해석되고 이중 대괄호를 사용하는 경우 "010"은 8로 해석됩니다.

단일 대괄호를 사용하는 경우 "08"은 8로 해석되고 이중 대괄호를 사용하면 유효한 숫자가 아니며 오류가 발생합니다.

여기에 설명 된 솔루션을 사용하여 오류를 방지 할 수 있습니다. https://stackoverflow.com/a/12821845/1419315

if [[ ${vara#0} -lt ${varb#0} ]]

또는

if [[ $((10#$vara)) -lt $((10#$varb)) ]]

참고 URL : https://stackoverflow.com/questions/24777597/value-too-great-for-base-error-token-is-08

반응형