答案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 section
bash 手册页。
答案2
在 bash 中,>&word
and &>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 的操作员 - 这是在几秒钟内使用第一种形式的另一个原因,除非你不能。