Bash: Iterare su linee in una variabile
Come si itera correttamente su linee in bash sia in una variabile, sia dall'uscita di un comando? Semplicemente impostando la variabile IFS su una nuova linea funziona per l'uscita di un comando, ma non quando si elabora una variabile che contiene nuove linee.
Per esempio
#!/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
``` ```
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
Questo dà l'uscita:
&001
Come si può vedere, l'eco della variabile o l'iterazione sopra il comando cat
stampa correttamente ciascuna delle linee una per una. Tuttavia, il primo per il loop stampa tutti gli elementi su una singola linea. Qualche idea?