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

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

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


From: Julio Cezar Neves - DATAPREVRJ
Subject: RES: [shell-script] "Bizarrices" com Arrays.
Date: Thu, 30 Dec 2004 19:16:05 -0300

Belissima análise do problema Andreyev!

O shell é extremamente lacônico e tenta de todas as formas te agradar pq
acha que vc está agindo da forma correta, e o Gentil pecou qdo não viu uma
das regras básicas de matriz: o índice tem que ser um inteiro.

Juntando as 2 coisas que falei veja:

Prompt> variavel[aa111]="Bla Bla"
Prompt> echo ${variavel[0]}
Bla Bla

Como o que ele encontrou foi uma letra, substituiu numéricamente por zero.
Só para confirmar:

Prompt> variavel[111aa]="Blu Blu"
Prompt> echo ${variavel[111]}
Blu Blu

[ ]s,
Julio Cezar Neves
- Gerente do Programa de Software Livre -
Tel:+55 21 2528-7070 / +55 21 8112-9988
Fax: +55 21 2528-7646
mailto:address@hidden


| -----Mensagem original-----
| De: Andreyev Dias de Melo [mailto:address@hidden]
| Enviada em: quinta-feira, 30 de dezembro de 2004 16:19
| Para: address@hidden
| Assunto: Re: [shell-script] "Bizarrices" com Arrays.
| 
| 
| 
| 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
| 
| 
| ---------------------------------------------------------------------
| Esta lista não admite a abordagem de outras liguagens de 
| programação, como perl, C etc. Quem insistir em não seguir 
| esta regra será moderado sem prévio aviso.
| ---------------------------------------------------------------------
| Sair da lista: address@hidden
| ---------------------------------------------------------------------
| Esta lista é moderada de acordo com o previsto em 
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
 
Links do Yahoo! Grupos




 




reply via email to

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