总的来说,我对 Linux 还很陌生,所以我不太熟悉某些命令的注意事项。
我想创建一个文件并注意到:
touch file.txt `
创建一个文件,但也是如此:
echo >> file.txt
并且
> file.txt
使用“">”和“touch”创建的文件都是0字节,但使用“echo”创建的文件是1字节。
为什么文件大小不同?创建文件的最佳方法是什么?什么时候应该使用“echo”而不是“touch”或“">”创建文件?
答案1
有关创建文件的一般问题,请参阅:为什么没有任何 shell 命令来创建文件?
与 和> file
一起echo >> file
,壳如果该文件尚不存在,则创建该文件。
使用 时> file
,如果文件已存在,则该文件将被截断。未指定命令,因此不会向文件写入任何内容,文件将为空。
echo
,不带任何参数,打印一个空行。因此输出包含行结束字符,通常是换行符 (LF, \n
):
% echo | od -c
0000000 \n
0000001
因此,使用echo >> file
,您将向文件写入一个字节。如果文件已经存在,那么它将添加一个字节,因为您使用了>>
(追加)而不是>
(覆盖)。
touch
如果文件尚不存在,则创建该文件,否则更新该文件的时间戳。touch
不会更改文件的内容,因此如果文件已经存在并且其中包含一些内容,则在touch
.
你想用哪个取决于你想要什么效果。
答案2
穆鲁的回答很好地解释了行为上的差异。
根据您的需求,可能有多种方法可以实现完全相同的目标。在这种情况下,这可能是“品味”或可读性的问题。我更喜欢touch
。可以说,它更安全 - 如果文件已经存在,并且您不想丢失其内容。也是令人难忘的。
如果您在脚本中编写命令,一般规则是人们阅读代码的次数多于您编写代码的次数。也就是说,你正在与人类交流 - 包括你未来的自己 - 而不仅仅是计算机:-)。您可能会发现以下代码行有点不明显。
> file
如果您需要与 完全相同的行为> file
,还有一个名为 的命令 truncate
。 truncate
由 GNU coreutils 提供。