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?
Parte 3: Quais são as possíveis formas de se declarar um array?
Em shell temos basicamente duas maneiras de se declarar um array, vou tratar cada uma com o máximo de detalhes possíveis e em quais situações uma deveria ser usada e não a outra.
A primeira maneira é:
array=(valor1 valor2 valor3)
Acima temos um array com três valores, internamente o shell armazena essa estrutura dessa maneira:
array=([0]="valor1" [1]="valor2" [2]="valor3")
Esse tipo de declaração deixa o bash gerenciar os índices, ou seja, ele faz sozinho o incremento do índice.
Vamos ver com mais detalhes essa declaração:
array == Nome do array
(valor1 valor2 valor3) == Valores separados por espaços (lembre-se: SEPARADOS POR ESPAÇOS)
Vamos a segunda maneira de se criar um array:
array2[0]='valor1'
array2[1]='valor2'
array2[2]='valor3'
Vamos ver como o bash criou a estrutura:
array2=([0]="valor1" [1]="valor2" [2]="valor3")
Como pode ser visto, não faz a menor diferença para o bash como é feita a declaração, a estrutura é sempre a mesma.
A primeira maneira é:
array=(valor1 valor2 valor3)
Acima temos um array com três valores, internamente o shell armazena essa estrutura dessa maneira:
array=([0]="valor1" [1]="valor2" [2]="valor3")
Esse tipo de declaração deixa o bash gerenciar os índices, ou seja, ele faz sozinho o incremento do índice.
Vamos ver com mais detalhes essa declaração:
array == Nome do array
(valor1 valor2 valor3) == Valores separados por espaços (lembre-se: SEPARADOS POR ESPAÇOS)
Vamos a segunda maneira de se criar um array:
array2[0]='valor1'
array2[1]='valor2'
array2[2]='valor3'
Vamos ver como o bash criou a estrutura:
array2=([0]="valor1" [1]="valor2" [2]="valor3")
Como pode ser visto, não faz a menor diferença para o bash como é feita a declaração, a estrutura é sempre a mesma.
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