24 votos

¿Qué es un buen equivalente a Perl listas en bash?

En perl simplemente haría lo siguiente para almacenar e iterar sobre una lista de nombres

my @fruit = (apple, orange, kiwi);
foreach (@fruit) {
        print $_;
}

¿Cuál sería el equivalente en bash?

45voto

Charles Duffy Puntos 34134

Bash (a diferencia de POSIX sh) soporta arreglos de discos:

fruits=(apple orange kiwi "dried mango")
for fruit in "${fruits[@]}"; do
  echo "${fruit}"
done

Esto tiene la ventaja que los elementos de la matriz pueden contener espacios u otros miembros de $IFS; como fueron insertados correctamente como elementos separados, se leen hacia fuera de la misma manera.

11voto

emk Puntos 27772

Así:

FRUITS="apple orange kiwi"
for FRUIT in $FRUITS; do
  echo $FRUIT
done

Aviso que esto no funcionará si hay espacios en los nombres de sus frutas. En ese caso, consulte esta respuesta en su lugar, y que es ligeramente menos portátil pero mucho más robusto.

6voto

Chris Jester-Young Puntos 102876

Ahora que la respuesta me gusta ha sido aceptada como la respuesta correcta, ahora moveremos en otro tema: Cómo utilizar IFS para ganancia personal.:-P

fruits="apple,orange,kiwifruit,dried mango"
(IFS=,
 for fruit in $fruits; do
     echo "$fruit"
 done)

He puesto el código en paréntesis para que el IFS cambio se aísla en su propio subproceso; así el final de la sección entre corchetes, IFS es vuelto a su antiguo valor. :-)

4voto

JBB Puntos 2013
para que en kiwi manzana naranja
hacer
  echo $i
hecho

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X