我看到这有以下行为:
[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
我还注意到,如果我包含""
then 它会按预期工作:
[root@divinity test]# echo 0""> file.txt
[root@divinity test]# cat file.txt
0
我想这只是 IO 重定向的一部分,但我不太明白echo 0>
在做什么。
在
echo 0 > file.txt
中,带有空格> file.txt
会导致 shell 重定向标准输出以便将其写入file.txt
(如果文件已经存在,则在截断文件之后)。该命令的其余部分echo 0
, 是在重定向到位的情况下运行的。当重定向运算符以不带引号的数字为前缀时,没有分隔符,重定向适用于相应的文件描述符,而不是默认值。0 是标准输入的文件描述符,因此
0> file.txt
将标准输入重定向到file.txt
. (1 是标准输出,2 是标准错误。)该数字被视为重定向运算符的一部分,不再作为命令参数的一部分;剩下的就是echo
.如果您在
echo
参数中包含更多内容,您可以更明显地看到这种情况:number
出现在第二种情况下,因为标准输出没有被重定向。重定向运算符的这种变体更常见于标准错误,
2> file.txt
.以这种方式重定向标准输入将破坏实际尝试从其标准输入读取的任何内容;如果您真的想在允许写入的同时重定向标准输入,您可以使用操作符执行此
<>
操作:文件描述符零是输入流。0>filename 将输入流放入文件名。0 > filename 会将 0 放入文件 filename 中。注意间距。