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?

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top