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 2: Por que devo usar?
A resposta a essa pergunta é simples:
Porque você pode!
Simples assim, quando comecei a trabalhar com Shell Script, meus códigos eram uma zona, parecia que eu nunca tinha programado na minha vida.
Conforme fui me aprofundando, comecei a usar funções, variáveis locais, traps, opções da linha de comando, arrays, e isso tornou meus códigos mais simples, limpos e com certeza mais reaproveitáveis.
O uso de arrays deve ser incentivado, já que é quase impossível se trabalhar com muitos dados sem usar uma estrutura mais complexa do que o simples var=1.
Mas lidar com array em shell não é tão trivial, devido a sua estrutura, e não prestar atenção no que está fazendo pode deixar o seu programa inconsistente, principalmente em shell já que ele não dá diversos erros que outras linguagens dariam por erros simples.
Lembre-se que o shell não erro se uma variável não foi inicializada, ele simplesmente ignora e retorna vazio, essa é umas coisas que você deve se preocupar quando estiver manipulando os arrays.
Se você está buscando portabilidade o array não é uma boa, já que somente o bash atualmente possui essa capacidade, então o foco aqui é apenas em scripts que rodarão em bash novos, todos os exemplos que darei aqui são rodados em um:
Debian GNU/Linux SID
Bash version 3.1.17
Também não é aconselhável utilizar arrays quando temos poucas variáveis, assim como um switch case é inútil para apenas dois valores, usar um array para poucos valores apenas trará lógica desnecessária para o programa, mas como sempre digo isso é tudo uma questão de bom senso; às vezes vale a pena ter um array para 3 valores, às vezes não vale a pena tê-lo para 10, embora sejam situações bem mais raras.
Porque você pode!
Simples assim, quando comecei a trabalhar com Shell Script, meus códigos eram uma zona, parecia que eu nunca tinha programado na minha vida.
Conforme fui me aprofundando, comecei a usar funções, variáveis locais, traps, opções da linha de comando, arrays, e isso tornou meus códigos mais simples, limpos e com certeza mais reaproveitáveis.
O uso de arrays deve ser incentivado, já que é quase impossível se trabalhar com muitos dados sem usar uma estrutura mais complexa do que o simples var=1.
Mas lidar com array em shell não é tão trivial, devido a sua estrutura, e não prestar atenção no que está fazendo pode deixar o seu programa inconsistente, principalmente em shell já que ele não dá diversos erros que outras linguagens dariam por erros simples.
Lembre-se que o shell não erro se uma variável não foi inicializada, ele simplesmente ignora e retorna vazio, essa é umas coisas que você deve se preocupar quando estiver manipulando os arrays.
Quando não usar?
Os arrays são relativamentos novos no mundo do SS, eles são implementados pelo bash e as versões mais antigas não suportam esse tipo de estrutura. Então usar um array significa diminuir a possibilidade de portar o seu script ou programa, para um outro Linux mais antigo, ou para outro que shell que não o bash.Se você está buscando portabilidade o array não é uma boa, já que somente o bash atualmente possui essa capacidade, então o foco aqui é apenas em scripts que rodarão em bash novos, todos os exemplos que darei aqui são rodados em um:
Debian GNU/Linux SID
Bash version 3.1.17
Também não é aconselhável utilizar arrays quando temos poucas variáveis, assim como um switch case é inútil para apenas dois valores, usar um array para poucos valores apenas trará lógica desnecessária para o programa, mas como sempre digo isso é tudo uma questão de bom senso; às vezes vale a pena ter um array para 3 valores, às vezes não vale a pena tê-lo para 10, embora sejam situações bem mais raras.
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