Frage

In Perl würde man einfach die folgenden Schritte aus zu speichern und eine Liste von Namen iterieren

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

Was das äquivalent sein in bash würde?

War es hilfreich?

Lösung

bash (im Gegensatz zu POSIX sh) unterstützt Arrays:

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

Dies hat den Vorteil, dass Array-Elemente Leerzeichen oder andere Mitglieder von $ IFS enthalten können; solange sie korrekt als separate Elemente eingefügt wurden, werden sie auf die gleiche Weise ausgelesen werden.

Andere Tipps

Wie folgt aus:

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

Diese Mitteilung wird nicht funktionieren, wenn es Leerzeichen in den Namen Ihrer Früchte sind. In diesem Fall finden Sie unter diese Antwort statt, die etwas weniger tragbar, aber viel robuster ist.

Nun, da die Antwort, die ich wurde als die richtige Antwort akzeptiert mag, werde ich jetzt in ein anderes Thema: Wie IFS zur persönlichen Bereicherung nutzen. :-P

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

Ich habe den Code in Klammern gesetzt, so dass die IFS Änderung in seine eigenen subprocess isoliert wird; also am Ende des eingeklammerten Abschnitt IFS ist zurückgekehrt, um seinen alten Wert zurück. : -)

for i in apple orange kiwi
do
  echo $i
done
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top