奇怪的 txt 行为
Weird txt behavior
我有一个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 编辑它,添加一个新行然后删除该新行(因此它仍然只包含一行)它开始正常工作。
文本文件末尾没有换行符。一些程序会将其视为有效的文本文件,其最后一行不会碰巧以换行符结尾。其他人(显然包括 bash 的内置 read
命令,至少在默认情况下是这样)会将其视为无效,并且可能会忽略最后一行(不被视为 "line"因为它没有被标记为一个)。
vim 的默认行为是在您修改并保存文件时悄悄地在文件末尾添加一个换行符。
您可以在缺少换行符的文件中添加换行符,方法是使用 vim(或其他行为类似的编辑器)进行编辑,或者从 shell:
echo '' >> some.txt
一般来说,确保文本文件首先以换行符结尾是个好主意,至少如果它们打算用于类 UNIX 系统。
我有一个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 编辑它,添加一个新行然后删除该新行(因此它仍然只包含一行)它开始正常工作。
文本文件末尾没有换行符。一些程序会将其视为有效的文本文件,其最后一行不会碰巧以换行符结尾。其他人(显然包括 bash 的内置 read
命令,至少在默认情况下是这样)会将其视为无效,并且可能会忽略最后一行(不被视为 "line"因为它没有被标记为一个)。
vim 的默认行为是在您修改并保存文件时悄悄地在文件末尾添加一个换行符。
您可以在缺少换行符的文件中添加换行符,方法是使用 vim(或其他行为类似的编辑器)进行编辑,或者从 shell:
echo '' >> some.txt
一般来说,确保文本文件首先以换行符结尾是个好主意,至少如果它们打算用于类 UNIX 系统。