Wie iteriert man richtig über Zeilen in Bash, entweder in einer Variablen oder aus der Ausgabe eines Befehls? Das einfache Setzen der IFS-Variablen auf eine neue Zeile funktioniert für die Ausgabe eines Befehls, nicht jedoch beim Verarbeiten einer Variablen, die neue Zeilen enthält.
Zum Beispiel
#!/bin/bash
list="One\ntwo\nthree\nfour"
#Print the list with echo
echo -e "echo: \n$list"
#Set the field separator to new line
IFS=$'\n'
#Try to iterate over each line
echo "For loop:"
for item in $list
do
echo "Item: $item"
done
#Output the variable to a file
echo -e $list > list.txt
#Try to iterate over each line from the cat command
echo "For loop over command output:"
for item in `cat list.txt`
do
echo "Item: $item"
done
Dies ergibt die Ausgabe:
echo:
One
two
three
four
For loop:
Item: One\ntwo\nthree\nfour
For loop over command output:
Item: One
Item: two
Item: three
Item: four
Wie Sie sehen können, werden beim Echo der Variablen oder beim Iterieren über den cat
Befehl die einzelnen Zeilen korrekt gedruckt. Die erste for-Schleife druckt jedoch alle Elemente in einer einzelnen Zeile. Irgendwelche Ideen?