echo 0>file.txt 和 echo 0 > file.txt 有什么区别?

Kah*_*ahn 28 shell io-redirection

我看到这有这样的行为:

[root@divinity test]# echo 0 > file.txt
[root@divinity test]# cat file.txt
0
[root@divinity test]# echo 0> file.txt

[root@divinity test]# cat file.txt

Run Code Online (Sandbox Code Playgroud)

我还注意到,如果我包含"",那么它会按预期工作:

[root@divinity test]# echo 0""> file.txt
[root@divinity test]# cat file.txt
0
Run Code Online (Sandbox Code Playgroud)

我想这只是 IO 重定向的一部分,但我不太明白在echo 0>做什么。

Ste*_*itt 57

在 中echo 0 > file.txt,带有空格,> file.txt使 shell 重定向标准输出,以便将其写入file.txt(如果文件已存在,则在截断文件之后)。命令的其余部分echo 0是在重定向到位的情况下运行的。

\n

重定向运算符以不带引号的数字作为前缀且没有分隔时,重定向将应用于相应的文件描述符而不是默认值。0 是标准输入的文件描述符,因此0> file.txt将标准输入重定向到file.txt. (1 是标准输出,2 是标准错误。)该数字被视为重定向运算符的一部分,不再作为 command\xe2\x80\x99s 参数的一部分;剩下的就是\xe2\x80\x99 echo

\n

如果您在参数中包含更多内容,您可以更明显地看到这种情况的发生echo

\n
$ echo number 0 > file.txt\n$ echo number 0> file.txt\nnumber\n
Run Code Online (Sandbox Code Playgroud)\n

number在第二种情况下出现,因为标准输出未重定向\xe2\x80\x99t。

\n

重定向运算符的这种变体更常见于标准错误2> file.txt.

\n

以这种方式重定向标准输入将破坏任何实际尝试从其标准输入读取的内容;如果您确实想重定向标准输入,同时允许写入,则可以使用<>运算符来执行此操作:

\n
cat 0<> file.txt\n
Run Code Online (Sandbox Code Playgroud)\n

  • 我认为这是一个很好的答案(已投票),但我认为用 1 或 2 句话更好地解释在数字后面添加空格的作用将会受益。 (4认同)