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