Schlagen: Iterieren über Zeilen in einer Variable
Wie iteriert man korrekt über Zeilen in bash entweder in einer Variable oder von der Ausgabe eines Befehls aus? Einfach die IFS-Variable auf eine neue Zeile zu setzen, funktioniert bei der Ausgabe eines Befehls, aber nicht bei der Verarbeitung 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, wird durch das Echo auf die Variable oder die Iteration über den Befehl cat
jede der Zeilen eine nach der anderen korrekt ausgegeben. Die erste für Schleife druckt jedoch alle Posten in einer einzigen Zeile. Haben Sie eine Idee?