Bash가 정수 대신 8 진수 코드를 해석하지 못하게하려면 어떻게해야합니까?

유닉스 / 리눅스 프로젝트의 소개로 Horoscope RSS 스크립트를 작성하고 있는데, 수업 후에도 교수님이 고칠 수없는 문제가 발생했습니다. 실제 날짜를 확인하는 방법을 알 수 없으므로 사용자 입력을 MMDD 형식의 표준 숫자로 사용하여 기본 산술을 시도한다고 생각했습니다. 그에 따르면, 스크립트는 입력 값을 정수 대신 8 진수 코드로 읽는 것 같습니다. 다음은 스크립트 샘플입니다.

    elif [ "$olddate" -gt 1121 ] && [ "$olddate" -lt 1131 ] || [ "$olddate" -gt 1200 ] && [ "$olddate" -lt 1222 ]
then
echo "You are Sagittarius"
exit
elif [ "$olddate" -gt 1221 ] && [ "$olddate" -lt 1232 ] || [ "$olddate" -gt 0100 ] && [ "$olddate" -lt 0120 ]
then
echo "You are Capricorn"
exit

이것은 맨손으로 RSS 부분을 꺼 냈습니다. “olddate”는 내 읽기 프롬프트에서 예상되는 입력입니다. 1121 ~ 1131, 1200 ~ 1222 및 0100 ~ 0120은 작동하지만 1221 ~ 1232 사이에는 작동하지 않습니다. 그는 염소 자리에 0을 넣지 않고 113을 넣은 이후로 이것이 문제라고 생각했습니다. 나는 또한 양자리 (-gt 0320 && -lt 0332)를 줘야했던 0323이 물병 자리 (날짜는 -gt 0119 && -lt 0132 || -gt 0200 && -lt 0219)를 줬던 문제에 부딪쳤다. 0417이 작동하지 않습니다 (Aries의 다른 날짜 범위 -gt 0400 && -lt 0420).

BASH가 입력을 실제 숫자로 해석하도록하려면 어떻게해야합니까? “userdate”를 입력으로 예상하도록 읽기 프롬프트를 변경 한 후 추가하려고했습니다.

olddate=`printf '%d\n' "$userdate"`

그러나 그것은 효과가 없었습니다. 나를 도울 수있는 사람에게 미리 감사드립니다!



답변

다음과 같이 bash에서 숫자를 특정 기준으로 강제 변환 할 수 있습니다.

$ foo=400
$ echo $((8#$foo))
256
$ bar=0100
$ echo $((10#$bar))
100

일반적으로 형식은 $((base#value))입니다.