In bash, this works:
echo -n $'a\nb\nc\n' | while read x; do echo = $x =; done
The while loops through three times
= a =
= b =
= c =
But imagine a text file that doesn't have the conventional trailing newline. I think that read
should still work for all three lines, but it doesn't. I just get:
echo -n $'a\nb\nc' | while read x; do echo = $x =; done
= a =
= b =
The help read
in bash doesn't really clarify.
Note: I don't need this resolved, and I can see some ways to fix it myself. I am curious, and I am tempted to file a bug report - I generally try myself to respect files that mightn't have the trailing new line. I came across this when using the -d option to read. read -d " "
will split on spaces instead of newlines, but it will miss out on the last entry unless it has a trailing space.
(Ubuntu. GNU bash, version 4.1.5(1)-release)
$ man bash
read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
One line is read from the standard input, ...
I think the key is: How to define "One line"
.
Does text without a '\n' at the end
makes One line
?
I guess read
don't think so.