O que é um bom equivalente para o Perl de listas no bash?
Pergunta
Em perl, seria simplesmente fazer o seguinte para armazenar e iterar sobre uma lista de nomes de
my @fruit = (apple, orange, kiwi);
foreach (@fruit) {
print $_;
}
O que seria o equivalente a estar em bash?
Solução
bash (ao contrário POSIX sh) oferece suporte a matrizes:
fruits=(apple orange kiwi "dried mango")
for fruit in "${fruits[@]}"; do
echo "${fruit}"
done
Isto tem a vantagem de que os elementos de matriz podem conter espaços ou outros membros de us $IFS;desde que eles foram inseridos corretamente como elementos separados, eles são lidos da mesma maneira.
Outras dicas
Como esta:
FRUITS="apple orange kiwi"
for FRUIT in $FRUITS; do
echo $FRUIT
done
Observe que isso não funcionará se não houver espaços nos nomes das frutas.Nesse caso, consulte esta resposta em vez disso, o que é ligeiramente menor do portátil, mas muito mais robusto.
Agora que a resposta que eu como tem sido aceita como resposta correta, eu vou agora passar para outro tópico:como usar IFS
para ganho pessoal.:-P
fruits="apple,orange,kiwifruit,dried mango"
(IFS=,
for fruit in $fruits; do
echo "$fruit"
done)
Eu coloquei o código entre parênteses para que o IFS
a mudança é isolado em seu próprio subprocesso;assim, no final da secção entre parênteses, IFS
é revertido de volta para seu antigo valor.:-)
for i in apple orange kiwi do echo $i done