What happens is the read command fails when the input does not end with a new line. Since there is no newline at the end of your file, read fails, so the last iteration of the while skipped.
If you do not want / cannot make sure that your input file has a new line at the end, you can group your cat with echo to create the appearance of an input terminated by a new line, for example:
{ cat hello; echo; } | while read abcd; do echo $a,$b,$c,$d done
or like this:
(cat hello; echo) | while read abcd; do echo $a,$b,$c,$d done
janos
source share