bash - script - bourne again shell
¿Qué es un buen equivalente a las listas de Perl en bash? (4)
Ahora que la respuesta que me gusta ha sido aceptada como la respuesta correcta, pasaré a otro tema: cómo utilizar IFS
para obtener beneficios personales. :-PAG
fruits="apple,orange,kiwifruit,dried mango"
(IFS=,
for fruit in $fruits; do
echo "$fruit"
done)
Puse el código entre paréntesis para que el cambio de IFS
aislado en su propio subproceso; por lo tanto, al final de la sección entre corchetes, IFS
se revierte a su valor anterior. :-)
En Perl uno 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?
bash (a diferencia de POSIX sh) admite matrices:
fruits=(apple orange kiwi "dried mango")
for fruit in "${fruits[@]}"; do
echo "${fruit}"
done
Esto tiene la ventaja de que los elementos de la matriz pueden contener espacios u otros miembros de $ IFS; siempre que se inserten correctamente como elementos separados, se leen de la misma manera.
for i in apple orange kiwi do echo $i done
Me gusta esto:
FRUITS="apple orange kiwi"
for FRUIT in $FRUITS; do
echo $FRUIT
done
Tenga en cuenta que esto no funcionará si hay espacios en los nombres de sus frutas. En ese caso, vea esta respuesta , que es ligeramente menos portátil pero mucho más robusta.