bash 中 &> 和 >& 有什么区别?

bash 中 &> 和 >& 有什么区别?

bash 中&>和有什么区别?>&

tldp没有提到后者。它真的是重定向操作符吗?

或者有人知道更完整的教程吗?

答案1

bash man页面:

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

阅读redirection sectionbash 手册页。

答案2

在 bash 中,>&wordand &>word(首选语法)将标准输出和标准错误重定向到同一位置。这相当于>word 2>&1。在bash 手册

答案3

man bash

重定向标准输出和标准错误有两种格式:

       &>单词
       >&word

两种形式中,第一种是首选。这在语义上等同于
借给

       >单词 2>&1

答案4

其他答案在引用手册时没有提到一些注意事项:

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 equivalent to

>word 2>&1

即非常重要的事实:

When using the second form, word may not expand to a number or ‘-’. If it does, other 
redirection operators apply (see Duplicating File Descriptors below) for compatibility 
reasons.

这意味着如果您希望重定向到的文件的文件名为数字,那么最好使用第一种形式(即&>)。

坚持使用第一种形式的失败尝试(例如以下命令的第一组)不会产生预期的结果:

# No go
echo hello >& '1' # Goes to stdout, instead of a file named 1
echo hello >& "1" # Ibid.
echo hello >& \1  # Ibid.
echo hello >& $(echo 1) # You guessed it... Bash is smart!

# Lift off
echo hello &> 1   # Ahh, finally, a file called 1 contains "hello"

笔记:如果有人知道(或能想到)一种适用于数字文件名的“简单”方法,使用第一种形式(没有一些严重的疯狂,如命令替换和其他涉及子 shell 的卷积),我很乐意在评论中看到它。

另外,不要忘记,没有这样的事情&|- 只有|&通过管道转发 stdout/stderr 的操作员 - 这是在几秒钟内使用第一种形式的另一个原因,除非你不能。

相关内容