Bash does not seem to take the last record if it has no
trailing delimiter:
$ echo "0 1 2^3 4 5^6 7 8" |
while read -a array -d ^
do echo $array
done
0 3
In this sense it does not behave like awk:
$ echo "0 1 2^3 4 5^6 7 8" |
awk -v RS=^ '{print $1}'
0 3 6
This behavior is counter-intuitive. It just throws away the
last line and it's never even put into the array. I think
the whole intention of using read to split lines by
delimiter is always to read the last line even though it has
a trailing null or newline instead of a delimiter, just like
awk does.
IMO this is a bug but I'm sure this behavior is known and I
am wondering at its rationalization? I don't see any
arguments about it in the archives, this is just accepted?
It seems silly for a script to always have to take care to
add a delimiter even if the input doesn't have one, as is
extremely common (perhaps even universal). At the very
least I think an option should be present to turn on this
behavior for the builtin, because I can see some cases where
one *would* want the behavior as implemented as well.
What do people think of this?
Thanks.
--
Scott