我注意到,在编写 shell 脚本时,人们是否在 I/O 重定向操作符后放置空格存在很多不一致的地方。例如:
foo >bar.txt
会起作用,但也会这样:
foo > bar.txt
....甚至这个:
foo > bar.txt
事实上,即使是 Linux 文档项目页面也令人沮丧地不一致——在一个地方和另一个地方使用2>&1
(它实际上在我的带有空格的Bash终端中不起作用)> filename
!
我一直使用前者,因为后者对我来说就像 2 个不同的论点,但我想知道:两者之间有什么区别或推理吗?
比什么>bar.txt
更便携> bar.txt
?或者我应该在一种定义的情况下使用一种语法,而在另一种情况下使用另一种语法?
字符
<
,>
,&
和|
对 shell 来说是特殊的,并且在没有被引用时在任何位置都以其特殊含义被识别。可移植的重定向运算符是
>
,>>
,>|
,>&
,<
,<<
,<<-
,<>
. 重定向操作符前面可以有一个表示文件描述符的数字;在这种情况下,数字和重定向运算符之间不能有空格;并且该数字必须与前一个单词(如果有的话)用一个或多个空格分隔。除此之外,重定向运算符周围的未加引号的空格是可选的。有关详细信息,请参阅The Open Group Base Specifications 第 7 期,2018 版,Shell 和实用程序,第 2 章,“ Shell 命令语言”。