io 重定向运算符后面有空格吗?

io 重定向运算符后面有空格吗?

我注意到,在编写 shell 脚本时,人们在 I/O 重定向运算符后面是否放置空格方面存在很多不一致之处。例如:

foo >bar.txt

会起作用,但这样也会起作用:

foo > bar.txt

....甚至这个:

foo       >             bar.txt

事实上,即使Linux 文档项目页面令人沮丧地不一致 - 使用2>&1(这实际上在我的重击终端(带空格)在一个地方和> filename另一个地方!

我一直使用前者,因为后者对我来说就像是两种不同的论点,但我想知道:两者之间有什么区别或推理吗?

比什么>bar.txt更便携?> bar.txt或者我应该在一种定义的情况下使用一种语法,而在另一种情况下使用另一种语法?

答案1

  1. 字符<>&|对于 shell 来说是特殊的,并且在不加引号时在任何位置都以其特殊含义被识别。

  2. 可移植重定向运算符是>, >>, >|, >&, <, <<, <<-, <>。重定向操作符前面可以有一个指示文件描述符的数字;在这种情况下,号码和重定向运算符之间不能有空格;并且数字必须与前一个单词(如果有)隔开一个或多个空格。除此之外,重定向运算符周围未加引号的空格是可选的。

The Open Group 基本规范第 7 期,2018年版,壳牌和公用事业公司, 第2章, ”外壳命令语言”了解详情。

相关内容