我正在读取文件并写入,while 在到达文件末尾之前退出。它始终存在于 n-1。有人能帮助我吗?
答案1
这个问题缺乏细节和实际代码。可能是这样的
while read variable; do …
read
能够读取不完整的行,但在这种情况下它会返回失败。因此循环体不会被执行。
POSIX需要尾随换行符才能将任何行视为完整。
3.195 不完整行
文件末尾的一个或多个非 <换行符> 字符序列。[…]
3.206 行
零个或多个非 <newline> 字符加上终止 <newline> 字符的序列。
Unix/Linux 中的换行符不是行分隔符。它是一行终结者。由于这种惯例,任何文本工具都可能遗漏不完整的行。
您可以使用知道问题的文本编辑器检查并修复输入文件,例如vim
。
或者你可以修改你的代码。同样的问题是在我们的姊妹网站 U&L SE 上解决:
while IFS= read -r line || [ -n "$line" ]; do printf '%s\n' "$line" done <file
[…]
当读取不完整的行时,
read
将失败,但$line
仍包含数据。额外的-n
测试将检测到这一点,以便允许循环体输出不完整的行。在那之后的迭代中,read
将再次失败并且$line
将是一个空字符串,从而终止循环。