【问题标题】:Weird txt behavior奇怪的 txt 行为
【发布时间】:2019-08-06 06:40:11
【问题描述】:

我有一个 centos 服务器。我克隆了一个 GitHub 存储库。我在该存储库中有 .txt 文件,其中包含 1 行。出于某种原因,它会这样做:

[root@0-0-0-0 Some]# cat some.txt
some text[root@0-0-0-0 Some]#

还有while read i; do echo "$i"; done < some.txt 看不到那条线。是什么原因造成的?以及如何避免。如果我用 vim 编辑它添加一个新行然后删除该新行(因此它仍然只包含一行)它开始正常工作。

【问题讨论】:

    标签: shell github centos cat


    【解决方案1】:

    文本文件末尾没有换行符。一些程序会将其视为一个有效的文本文件,其最后一行不会以换行符结尾。其他人(显然包括 bash 的内置 read 命令,至少默认情况下)会将其视为无效,并且可能会忽略最后一行(不被视为“行”,因为它没有被标记为一个)。

    vim 的默认行为是在您修改并保存文件时悄悄地在文件末尾添加换行符。

    您可以通过使用 vim(或其他行为类似的编辑器)编辑文件,或通过从 shell 添加它来为缺少换行符的文件添加换行符:

    echo '' >> some.txt
    

    一般来说,最好首先确保文本文件以换行符结尾,至少如果它们打算在类 UNIX 系统上使用的话。

    【讨论】:

    • read 在没有以换行符终止时忽略最后一行是丑陋的while IFS= read -r line || [[ -n $line ]]; 保证读取所有行的原因。
    猜你喜欢
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 2015-07-20
    • 2010-10-03
    • 2021-07-12
    相关资源
    最近更新 更多