Trabalhar com array no Bash

Pretendo deixar mais claro aqui como trabalhar com arrays no bash. Espero que após ler esse artigo não restem dúvidas tais como: Quando devo usar? Por que devo usar? Quando não usar? Quais são as possíveis formas de se declarar um array? Posso trabalhar com índices alfanuméricos?

[ Hits: 70.847 ]

Por: Denis Doria em 26/06/2008


Posso trabalhar com índices alfanuméricos?



Em certas linguagens é possível usar valores alfanuméricos como índices em um array, em shell isso não é possível, apenas números inteiros são aceitos.

Vamos ver o que ocorre quando tentamos usar uma letra como índice:

$ array[a]='valor1'
$ echo ${array[a]}

valor1

Quando olhamos isso realmente parece que funciona, mas não se deixe enganar, isso NÃO está funcionando, vamos analisar com calma para vermos o porque disso estar errado.

$ array[b]='valor2'
$ echo ${array[b]}

valor2

Novamente parece que funciona, mas NÃO está funcionando, vamos olhar novamente o índice 'a':

$ echo ${array[a]}
valor2

Viu, esperávamos que viesse o 'valor1'; porém o que apareceu foi o 'valor2'; mas por quê? O bash não deu erro. Vamos a explicação:

Primeiro vamos ver como o array está armazenado:

array=([0]="valor2")

Como pode ser, somente há o valor '0', não há nem 'a', muito menos 'b'; para entendermos porque isso ocorreu basta fazer:

$ echo $((a)) 0

O shell sempre converte as letras para o número zero, por isso que tivemos esse problema.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Por que devo usar?
   3. Quais são as possíveis formas de se declarar um array?
   4. Como ler os valores de um array?
   5. Posso trabalhar com índices alfanuméricos?
   6. Dicas
Outros artigos deste autor

Como trabalhar com funções em bash

Leitura recomendada

Programar em Shell - Script só para os baixinhos

Programando em shell script (conceitos básicos)

expr - Definição e uso do comando

Introduzindo um pouco mais a fundo o shell script (revisado)

AWK - Manipulação de arquivos de texto

  
Comentários
[1] Comentário enviado por roberva em 26/06/2008 - 10:34h

Ótimo artigo! Excelente!
Até que enfim, uma luz de vida inteligente aqui...

Uma contrib. for dummies:

array=(1 2 3 4 5 6 7 8 9 10)
for i in ${array[*]}; do i=$[i-1]; echo ${array[$i]}; done


p.s: workaround = `i=$[i-1]`; kkkkkkkkkkk


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts