matriz unidimensional no shell não funciona para índices maiores que 08

1

Eu tenho me perguntado por que a matriz unidimensional no shell não está funcionando para o sub-script / index 08 e 09. Como isso acontece?

$ 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]}

Veja, quando o subscrito usado é 08 e 09, então o erro abaixo está chegando:

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

Para valores de 00 a 07, o script está funcionando. por exemplo. Se no script, se eu entrar no mês como 07, a saída é:

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

Para esses sub-scripts, por exemplo, 08 & 09, não está funcionando, mas funcionará se eu substituir 08 por 8 e 09 por 9 no campo do mês.

$ 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]}

o que está acontecendo aqui?

    
por Ravi 10.01.2016 / 07:35

1 resposta

3

Forçar o bash a usar a base 10:

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

Os números com um zero à esquerda são interpretados como números octais. Sistema octal não tem 8 e 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
    
por 10.01.2016 / 08:04