Bash: Iterating over lines in a variable
With bash, if you want to embed newlines in a string, enclose the string with $''
:
$ list="One\ntwo\nthree\nfour"
$ echo "$list"
One\ntwo\nthree\nfour
$ list=$'One\ntwo\nthree\nfour'
$ echo "$list"
One
two
three
four
And if you have such a string already in a variable, you can read it line-by-line with:
while IFS= read -r line; do
echo "... $line ..."
done <<< "$list"
You can use while
+ read
:
some_command | while read line ; do
echo === $line ===
done
Btw. the -e
option to echo
is non-standard. Use printf
instead, if you want portability.
#!/bin/sh
items="
one two three four
hello world
this should work just fine
"
IFS='
'
count=0
for item in $items
do
count=$((count+1))
echo $count $item
done