shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] "Bizarrices" com Arrays.


From: Andreyev Dias de Melo
Subject: Re: [shell-script] "Bizarrices" com Arrays.
Date: Thu, 30 Dec 2004 16:18:58 -0200

On Wed, 29 Dec 2004 16:39:07 -0200, Gentil de Bortoli Júnior
<address@hidden> wrote:
> Pessoal, agora é minha vez de pedir um help para tentar entender
> algumas coisas que estão acontecendo.
> 
> Eu estou escrevendo um script que faz algumas brincadeiras com arrays.
> Algo não saiu como eu queria e comecei a fazer testes.
> 
> A primeira dúvida é essa:
> 
> [gentil@gentil:~]$ variavel[11111]="Bla Bla"
> [gentil@gentil:~]$ variavel[aaaaa]="Bla Bla"
> [gentil@gentil:~]$ variavel[aa111]="Bla Bla"
> [gentil@gentil:~]$ variavel[11aaa]="Bla Bla"
> bash: 11aaa: value too great for base (error token is "11aaa")
> [gentil@gentil:~]$
> 
> ##### Ou seja, por que quando eu tentei definir a chave do meu array
> com a string "11aaa" eu obtive o erro acima?
> 
> A segunda dúvida é a seguinte:
> 
> [gentil@gentil:~]$ variavel[11_111]="Bla Bla"
> bash: 11_111: value too great for base (error token is "11_111")
> [gentil@gentil:~]$

Pô Gentil, cada dúvida hein?! Não achei muita coisa no google e no man
do bash, mas talvez possamos divagar sobre isso enquanto nossos gurus
não nos acodem! :-D

No man do bash diz: "Arrays are indexed using integers and are
zero-based.". Talvez indices com coisas não númericas sejam
considerados como em bases diferentes da decimal, como octal ou
hexadecimal, aí as strings que passamos podem ser muito grandes para
serem indices nestas bases...

> Obtive o erro acima. Então mudei e fiz algo assim:
> 
> [gentil@gentil:~]$ variavel[11^111]="Bla Bla"
> [gentil@gentil:~]$ echo ${variavel[11^111]}
> Bla Bla
> [gentil@gentil:~]$
> 
> Parece que funcionou, certo? Mas aí, fui fazer mais um teste, vejam:
> 
> [gentil@gentil:~]$ variavel[11^111]=6
> [gentil@gentil:~]$ variavel[11^222]=7
> [gentil@gentil:~]$ echo ${variavel[11^111]}
> 6

Parece que ele não tem problemas com ^, cada variável:

$ echo ${variavel[@]}
6 7

O tamanho do array:

$ echo ${#variavel[*]}
2

> Ok, isso funcionou como o esperado mas... o que acontece aqui?
> 
> [gentil@gentil:~]$ variavel[1916^AAAA]=6
> [gentil@gentil:~]$ variavel[1916^YYYY]=5
> [gentil@gentil:~]$ echo ${variavel[1916^AAAA]}
> 5
> [gentil@gentil:~]$
> 
> Ou seja, pedi o valor de uma variável e recebi o valor da outra.

Acho que vc sobrescreveu sua variável:

$ variavel[1916^AAAA]=6
$ variavel[1916^YYYY]=5
$ echo ${#variavel[*]}
1
$ echo ${#variavel[@]}
1

> E nesse último exemplo, volta a funcionar:
> 
> [gentil@gentil:~]$ variavel[1111^YYYY]=5
> [gentil@gentil:~]$ variavel[2222^AAAA]=6
> [gentil@gentil:~]$ echo ${variavel[1111^YYYY]}
> 5
> [gentil@gentil:~]$

Mas agora a parte antes do ^ mudou... Hmmm, acho que ele não lê o que
vem depois do circunflexo se isto não for númerico...

$ variavel[1111^YYYY]=5
$ echo ${variavel[1111]}
5

> Desculpem o e-mail grande e chato mas... não estou sacando o que está
> acontecendo.

Que isso, vc colheu bons exemplos. HIH!
[]s
-- 
Andreyev


reply via email to

[Prev in Thread] Current Thread [Next in Thread]