“>&”是什么是什么时候跟一个文件名?

时间:2011-10-08 09:41:38

标签: shell

使用Bourne Shell时遇到一个奇怪的命令:

echo 123 >& result

通常情况下,我会期待类似echo 123 > result 2>&1的内容,我绝不会指望>&后跟文件名。

但令我惊讶的是,当我在shell中执行此命令时,结果是正确的,它确实创建了一个名为“result”的文件,并且该文件包含文本“123”。

我对此语法感到困惑。任何人都可以向我解释这个吗?

3 个答案:

答案 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 >& resultecho 123 1>&1 result

相同

答案 2 :(得分:1)

案件解决了:

echo 123 >& result相当于echo 123 > result 2>&1