我有一个文本文件foo.txt,其中包含以下文本作为内容,
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
我有一个 shell 脚本,
file="foo.txt"
while IFS= read -r line
do
echo "$line"
done < "$file"
Run Code Online (Sandbox Code Playgroud)
但这仅打印到4.
实际输出:
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
如何获得如下预期输出?
预期输出:
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
这是由于输入文件最后一行缺少换行符。
您可以使用此循环来读取所有内容:
while IFS= read -r line || [ -n "$line" ]; do
echo "$line"
done < "$file"
Run Code Online (Sandbox Code Playgroud)
对于没有换行符的最后一行,read不会返回成功,因此[ -n "$line" ]会进行检查以确保在$line不为空时打印它。
PS:如果您不介意更改输入文件,则可以使用printf以下命令附加换行符:
printf '\n' >> "$file"
Run Code Online (Sandbox Code Playgroud)
然后正常读取:
while IFS= read -r line; do
echo "$line"
done < "$file"
Run Code Online (Sandbox Code Playgroud)