我尝试从sysin获取一些数据,这是我的问题:如果数据来自文件,则不读取最后一行。 文本文件示例:
line1
line2
line3
我的代码:
#!/bin/bash
while read line
do
echo "$line"
done
输出:
$ ./test.sh < data.txt
line1
line2
如果我在我的文件末尾写下空字符串输出正确。但我不喜欢它。 如何解决这个问题?
答案 0 :(得分:2)
这个成语是:
while read -r line || [[ $line ]]; do
: process "$line"
done
因此,我们继续循环,而 :
答案 1 :(得分:1)
如果你需要拼命读取没有EOL的文件,那么你可以检查返回的字符串是否为空而不是检查public void onError(int error)
退出状态:
read
答案 2 :(得分:0)
我敢打赌,data.txt缺少一个尾随换行符,请尝试使用
进行检查od -xa data.txt
看看结尾:
$ od -xa data.txt
0000000 696c 656e 0a31 696c 656e 0a32 696c 656e
l i n e 1 nl l i n e 2 nl l i n e
0000020 0033
3
0000021
如果您看到上述内容,则错过换行符。
$ od -xa data-with-nl.txt
0000000 696c 656e 0a31 696c 656e 0a32 696c 656e
l i n e 1 nl l i n e 2 nl l i n e
0000020 0a33
3 nl
0000022
如果缺少尾随换行符,有些shell也会显示%
符号,请尝试:
$ cat data.txt
line1
line2
line3%
$