问题
when i cat this file I get 6 lines (it is a diff file)
bash-3.00$ cat /tmp/voo
18633a18634
> sashabSTP
18634a18636
> sashatSTP
21545a21548
> yheebash-3.00$
however when i read it line by line i only get 5 lines.
bash-3.00$ while read line ; do echo $line ; done < /tmp/voo
18633a18634
> sashaSTP
18634a18636
> sashatSTP
21545a21548
or this
bash-3.00$ cat /tmp/voo | while read line ; do echo $line ; done
18633a18634
> sashabSTP
18634a18636
> sashatSTP
21545a21548
bash-3.00$
i am missing the last line 'yhee' from the while loops.
回答1:
Note:
21545a21548
> yheebash-3.00$
^---- no line break
Your file doesn't terminate with a line break.
回答2:
If you are wondering why?, this might satisfy your curiosity.
If you work with files which may or may not end up with a new line at end, you can do this:
while IFS= read -r line || [ -n "$line" ]; do
echo "$line"
done <file
Or this:
while IFS= read -r line; do
echo "$line"
done < <(grep "" file)
Read more:
- https://stackoverflow.com/a/31397497/3744681
- https://stackoverflow.com/a/31398490/3744681
来源:https://stackoverflow.com/questions/20359553/bash-while-loop-drops-last-line-of-text-file