Shell脚本未读取文件的最后一行

时间:2018-09-25 09:51:13

标签: shell file

我有一个文本文件foo.txt,下面的文本为内容,

1
2
3
4
5

我有一个shell脚本,

file="foo.txt" 
while IFS= read -r line
do
   echo "$line"
done < "$file"

但这只会打印到4

实际输出:

1
2
3
4

如何获得如下所示的预期输出?

预期输出:

1
2
3
4
5

1 个答案:

答案 0 :(得分:3)

这是由于输入文件的最后一行缺少换行符。

您可以使用此循环读取所有内容:

while IFS= read -r line || [ -n "$line" ]; do
    echo "$line"
done < "$file"

对于没有换行符的最后一行,read不会返回成功,因此进行了[ -n "$line" ]检查以确保在$line不为空时将其打印出来。

PS:如果您不介意更改输入文件,请使用printf通过以下命令添加换行符:

printf '\n' >> "$file"

然后正常阅读:

while IFS= read -r line; do
    echo "$line"
done < "$file"