读取循环失败,而\作为行终止

时间:2017-03-02 11:26:12

标签: bash

输入文件:

$ cat list 
dog \
cat \
apple \

脚本:

while read line;do echo $line;done < list;

问题: 上面的脚本什么都不打印。而使用&#39; read -r&#39;代替读取打印所有行。

我的问题是......

在上述情况下(不使用-r),while循环至少运行一次并打印第一行输出吗?为什么条件检查在第一行本身失败?

1 个答案:

答案 0 :(得分:4)

由于所有换行都被转义,并且read读取到未转义的换行符,因此它会在没有得到换行符的情况下到达文件结尾。并且,正如help read所说:

Exit Status:
The return code is zero, unless end-of-file is encountered, read times out
(in which case it's greater than 128), a variable assignment error occurs,
or an invalid file descriptor is supplied as the argument to -u.

请注意,line仍然包含到目前为止读取的行:

$ while read line; do echo "$line"; done < foo; echo $line
dog cat apple