使用Bourne Shell时遇到一个奇怪的命令:
echo 123 >& result
通常情况下,我会期待类似echo 123 > result 2>&1
的内容,我绝不会指望>&
后跟文件名。
但令我惊讶的是,当我在shell中执行此命令时,结果是正确的,它确实创建了一个名为“result”的文件,并且该文件包含文本“123”。
我对此语法感到困惑。任何人都可以向我解释这个吗?
答案 0 :(得分:2)
这是一个Bash扩展,意味着将stdout和stderr重定向到结果文件。
使用POSIX兼容shell实现相同的便携式方法是:
echo 123 >bar 2>&1
由于“echo 123”不太可能在stderr上输出任何内容,因此这种语法无用。
以下是一个显示正常工作的示例:
(echo stderr 1>&2;echo stdout) >& foo
(echo stderr 1>&2;echo stdout) >bar 2>&1
答案 1 :(得分:1)
STDOUT的文件描述符是1,如果您没有明确提及任何文件描述符,则默认使用该文件描述符。因此,如果我记得正确echo 123 >& result
与echo 123 1>&1 result
答案 2 :(得分:1)
案件解决了:
echo 123 >& result
相当于echo 123 > result 2>&1