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


Reply via email to