我有一个文本文件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
答案 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"