2015-10-17 80 views
6

我经常看到这样的命令:什么时候可以在Bash中使用|&?它可用于其他shell吗?

command1 |& command2 

所以我们在这里做的是标准错误重定向到标准输入,让他们都“成为”标准输入到管道中的下一个元素。

或者更好在Bash Reference manual -> Pipelines描述:

管道是由 控制操作中的一个分隔简单命令的序列“|”或“| &'。

...

如果使用|&,命令1的标准错误,除了其 标准输出,被连接到通过所述管 命令2的标准输入;它是2>&1 |的简写。标准输出的标准错误 的这种隐式重定向是在命令指定的任何 重定向之后执行的。

不过,我想知道:是这样的语法使用在所有的Bash版本?也就是说,它总是可以与2>&1 |互换吗?它是否也可以用于任何其他shell(ksh,csh ...)?

+0

你的标题,并最终你会问这个问题似乎是TBH两个不同的问题给我。我建议编辑标题 – MohitC

+0

@MohitChandak你是对的。我从标题开始,然后调查了这个话题。在我整理出一些东西的时候,还提出了其他问题。将编辑它,谢谢。 – fedorqui

+0

如果你想知道什么是可用的其他shell,你最好试用posix模式的shell,因为标准是唯一的方法来保证一件事肯定会在另一个系统中工作 – HuStmpHrrr

回答

4

此功能仅适用于猛砸4+:

|& (bash4) 

Source


dd. The parser now understands `|&' as a synonym for `2>&1 |', which redirects the standard 
    error for a command through a pipe. 

Source


还要注意的是个checkbashisms脚本将其标记为好:

'\s\|\&' =>     q<pipelining is not POSIX>, 

Source

+1

哇,伟大的研究史蒂文! – fedorqui

相关问题