셸 스 크 립 트 에서 발생 한 8 진법 과 10 진법 의 문제: 08: value too great for base (error token is "08")

문제 설명: 프로젝트 수요 로 인해 월 의 숫자 를 꺼 내 해당 하 는 작업 을 해 야 합 니 다. 월 의 숫자 는 보통 07 08 과 같은 기본 값 으로 8 진법 으로 인식 되 어 이상 합 니 다. 셸 스 크 립 트 를 실행 할 때 이상 을 다음 과 같이 던 집 니 다.
[postgres@localhost ~]$ sh auto_partition.sh
uto_partition.sh: line 15: 08: value too great for base (error token is "08")

이러한 이상 은 주로 셸 에서 0 으로 시작 하기 때 문 입 니 다. 예 를 들 어 06 은 기본적으로 8 진 숫자 로 인식 되 기 때 문 입 니 다. 8 진 숫자 와 10 진 숫자 를 비교 하거나 연산 하면 상기 정 보 를 알려 줍 니 다.
스 크 립 트 에서 언급 된 비 교 는 다음 과 같다. 비교 도 있 고 계산 도 있다.
if [ $mon -eq 12 ];then
    mon=01
else
    mon=$(($mon+1))
fi

다음은 셸 명령 으로 어떻게 해결 하 는 지 설명 하 겠 습 니 다. 예 를 들 면 다음 과 같 습 니 다.
十进制下的计算如下 没问题
[postgres@localhost ~]$ mon=8
[postgres@localhost ~]$ echo $(($mon+1))
9

八进制的 如下 抛出异常
[postgres@localhost ~]$ mon=08
[postgres@localhost ~]$ echo $(($mon+1))
-bash: 08: value too great for base (error token is "08")

이 럴 때 8 진법 을 10 진법 으로 바 꿔 야 하 는데 그 중에서 $((10#$mon)) 의 역할 은 8 진법 을 10 진법 으로 바 꾸 는 것 이다.
[postgres@localhost ~]$ mon=08
[postgres@localhost ~]$ echo $(($((10#$mon))+1))
9

좋은 웹페이지 즐겨찾기