Bash: Itereren over regels in een variabele
Hoe kan men goed itereren over regels in bash, hetzij in een variabele, hetzij uit de uitvoer van een commando? Simpelweg het instellen van de IFS variabele op een nieuwe regel werkt voor de uitvoer van een commando, maar niet bij het verwerken van een variabele die nieuwe regels bevat.
Bijvoorbeeld
#!/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
Dit geeft de uitvoer:
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
Zoals je kunt zien, drukt het echoën van de variabele of het itereren over het cat
commando elk van de regels één voor één correct af. Echter, de eerste voor lus print alle items op een enkele regel. Heeft u een idee?