输入文件:
$ cat list
dog \
cat \
apple \
脚本:
while read line;do echo $line;done < list;
问题: 上面的脚本什么都不打印。而使用&#39; read -r&#39;代替读取打印所有行。
我的问题是......
在上述情况下(不使用-r),while循环至少运行一次并打印第一行输出吗?为什么条件检查在第一行本身失败?
答案 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