在创建新文件时使用“touch file”和“> file”有什么区别?

Ste*_*shi 13 command-line

我是 Linux 新手。当我使用 bash 在当前目录下创建一个新文件 .gitignore 时,我发现我可以这样做:

> .gitignore
Run Code Online (Sandbox Code Playgroud)

或者

touch .gitignore
Run Code Online (Sandbox Code Playgroud)

似乎他们做同样的事情。当我查看 手册时touch,它说更改当前文件的时间戳,但没有>. 那么有人可以解释一下可以>做什么,在这种情况下使用这两个命令有什么区别吗?谢谢。

mur*_*uru 21

>是外壳重定向操作符。请参阅shell 命令中“>”和“>>”之间的区别是什么?什么时候应该使用<或<()或<<和>或>()?它主要用于将命令的输出重定向到文件。如果文件不存在,shell 会创建它。如果它存在,shell 会截断它(清空它)。使用 just > file,没有命令,所以 shell 创建一个文件,但没有输出发送给它,所以最终效果是创建一个空文件,或清空现有文件。

touch如您所知,是创建文件或更新时间戳的外部命令。使用touch,文件内容不会丢失(如果存在),与使用不同>

的行为>取决于外壳。在 bash、dash 和大多数 shell 中,> foo将按您的预期工作。在 zsh 中,默认情况下,其> foo工作方式类似于cat > foo- zsh 等待您输入。

  • 这里的关键是 `&gt;&gt; file` 和 `touch file` 之间没有实际区别,但是如果 `file` 不存在,那么它们和 `&gt; file` 之间就有很大的区别(因为前面的内容`file` 丢失)。那,加上 zsh 的不一致行为意味着 `touch file` 是“最安全的”,因此应该被记住为正确的方法。 (10认同)