How does one properly iterate over lines in bash either in a variable, or from the output of a command? Simply setting the IFS variable to a new line works for the output of a command but not when processing a variable that contains new lines.
#!/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
This gives the output:
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
As you can see, echoing the variable or iterating over the
cat command prints each of the lines one by one correctly. However, the first for loop prints all the items on a single line. Any ideas?