셸의 1차원 배열은 08보다 큰 인덱스에서는 작동하지 않습니다.

셸의 1차원 배열은 08보다 큰 인덱스에서는 작동하지 않습니다.

쉘의 1D 배열이 아래 첨자/인덱스 08 및 09에서 작동하지 않는 이유가 궁금합니다. 어떻게 이런일이 일어 났습니까?

$ cat check

month_arr=(0 31 30 31 30 31 30 31 31 30 31 30 31)
date="10/08/10" # dd/mm/yy format used here
IFS="/"
set  $date
echo ${month_arr[$2]}

사용된 첨자가 08과 09이면 다음 오류가 발생합니다.

ravi@ravi-Aspire-5315:~/Documents/testing/shell$ ./check
./check: line 5: 08: value too great for base (error token is "08")

00~07 값의 경우 스크립트가 실행 중입니다. 예를 들어 스크립트에서 입력 월이 07인 경우 출력은 다음과 같습니다.

ravi@ravi-Aspire-5315:~/Documents/testing/shell$ ./check
31

이러한 아래 첨자 08과 09의 경우 작동하지 않지만 월 필드에서 08을 8로 바꾸고 09를 9로 바꾸면 작동합니다.

$ cat check

month_arr=(0 31 30 31 30 31 30 31 31 30 31 30 31)
date="10/8/10" # dd/mm/yy format used here
IFS="/"
set  $date
echo ${month_arr[$2]}

여기서 무슨 일이 일어나고 있는 걸까요?

답변1

bash가 기본 10을 사용하도록 강제합니다.

echo "${month_arr[10#$2]}"

1과 0으로 시작하는 숫자는 8진수로 해석됩니다. 8진법에는 8과 9가 없습니다.

Octal 1 = decimal 1
Octal 2 = decimal 2
Octal 3 = decimal 3
...
Octal 6 = decimal 6
Octal 7 = decimal 7
Octal 10 = decimal 8
Octal 11 = decimal 9
Octal 12 = decimal 10
Octal 13 = decimal 11

관련 정보