Here\'s what I\'m trying. What I want is the last echo
to say \"one two three four test1...\" as it loops. It\'s not working; read line
is coming up em
I would normally write:
while read line
do
array=( ${array[@]} $line )
echo ${array[@]}
done <<EOM
test1
test2
test3
test4
EOM
Or, even more likely:
cat <<EOF |
test1
test2
test3
test4
EOF
while read line
do
array=( ${array[@]} $line )
echo ${array[@]}
done
(Note that the version with a pipe will not necessarily be suitable in Bash. The Bourne shell would run the while
loop in the current shell, but Bash runs it in a subshell — at least by default. In the Bourne shell, the assignments made in the loop would be available in the main shell after the loop; in Bash, they are not. The first version always sets the array variable so it is available for use after the loop.)
You could also use:
array+=( $line )
to add to the array.
You can put the command in front of while instead:
(echo <<EOM
test1
test2
test3
test4
EOM
) | while read line; do
array=( ${array[@]} $line )
echo ${array[@]}
done
replace
done < <( echo <<EOM
with
done < <(cat << EOM
Worked for me.