“&>”和“>&”之间的区别

“&>”和“>&”之间的区别

根据文档:

There  are  two  formats  for  redirecting standard output and standard
   error:

          &>word
   and
          >&word

   Of the two forms, the first is preferred.  This is semantically equiva-
   lent to

          >word 2>&1

但是,当我运行这些命令时:

echo abc 2>&1 | tee myfile

我得到 abc 并将其流式传输到文件中。

但与:

echo abcd 2&>1 | tee myfile

没有输出,并且文件中插入了一个空字符串。 >& 和 &> 不应该是一样的吗?

答案1

摘要: 在shell 中,和bash之间没有区别,但您显示的代码中的重定向不同。>&&>

在您的第一段代码中,您使用2>&1(“将标准错误重定向到标准输出所在的位置”)。

2&>1然后你会问为什么这与使用if>&和are the same不同&>

bash您引用的文档是具体来说关于重定向运算符&>word>&word.这些与标准重定向相同>word 2>&1,文档中也提到了这一点。请注意,没有提到文件描述符,手册没有写[n]&>word[n]>&word其他一些重定向运算符(目前还不清楚这意味着什么,因为这两个重定向运算符已经隐含地涉及标准输入和标准错误)。

只有两个命令中的第二个,即 using 2&>1,正在使用这些重定向运算符之一,并且它不会按照您的想法进行解释。第一个命令echo abcd 2>&1没有使用特殊的非标准重定向,>&因为它后面紧跟着一个数字。手册中特别提到了这一点:

使用第二种形式时,word可能不会扩展为数字或-。如果是,则应用其他重定向运算符(请参阅复制文件描述符 如下)出于兼容性原因。

您的第二个命令 ,echo abcd 2&>1与 相同echo abcd 2 &> 1,即“echo使用两个参数abcd和进行调用2,并将标准输出和标准错误写入名为 的文件1。”

相关内容