gpt4 book ai didi

bash - 如果在使用 read 时没有以新行字符 (\n) 终止,请尊重最后一行

转载 作者:行者123 更新时间:2023-11-29 08:54:00 25 4
gpt4 key购买 nike

我注意到一段时间以来 read 从来没有真正读取文件的最后一行,如果它的末尾没有“换行”字符的话。如果考虑到只要文件中没有“换行”字符,就好像它包含 0 行(这很难承认!),这是可以理解的。例如,请参阅以下内容:

$ echo 'foo' > bar ; wc -l bar
1 bar

但是……

$ echo -n 'bar' > foo ; wc -l foo
0 foo

那么问题是:当使用 read 处理不是我自己创建或修改的文件时,我该如何处理这种情况,我不知道它们是否真的结束了带有“换行”字符?

最佳答案

read 实际上是将未终止的行读入指定的 var(默认为 $REPLY)。它还在这样的行上返回 false,这仅表示“文件结束”;在经典的 while 循环中直接使用它的返回值从而跳过最后一行。如果稍微更改循环逻辑,则可以正确处理非新行终止文件,无需事先清理,使用 read:

while read -r || [[ -n "$REPLY" ]]; do
# your processing of $REPLY here
done < "/path/to/file"

请注意,这比依赖外部的解决方案要快得多。

Gordon Davisson 致敬用于改进循环逻辑。

关于bash - 如果在使用 read 时没有以新行字符 (\n) 终止,请尊重最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14544636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com