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

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

我看到这有这样的行为:

[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

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

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

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

答案1

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

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

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

$ echo number 0 > file.txt
$ echo number 0> file.txt
number

number在第二种情况下出现,因为标准输出没有重定向。

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

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

cat 0<> file.txt

答案2

文件描述符零是输入流。 0>filename 将输入流放入 filename 中。 0 > filename 会将 0 放入文件 filename 中。注意间距。

相关内容