什么时候可以在Bash中使用|&?它可用于其他外壳吗?

fed*_*qui 6 bash shell

我经常看到如下命令:

command1 |& command2
Run Code Online (Sandbox Code Playgroud)

所以我们在这里做的是将stderr重定向到stdin,以便它们"成为"stdin到管道中的下一个元素.

或者在Bash参考手册中更好地描述- >管道:

管道是由一个控制运算符'|'分隔的一系列简单命令 或'|&'.

...

如果|&使用,则command1的标准错误除了标准输出外,还通过管道连接到command2的标准输入; 它是简写2>&1 |.标准错误到标准输出的隐式重定向是在命令指定的任何重定向之后执行的.

但是,我想知道:这个语法在所有Bash版本中都可用吗?也就是说,它总是可以互换2>&1 |吗?它还可以用在任何其他shell(ksh,csh ......)中吗?

小智 4

此功能仅适用于 Bash 4+:

|& (bash4)
Run Code Online (Sandbox Code Playgroud)

来源


|& (bash4)
Run Code Online (Sandbox Code Playgroud)

来源


另请注意,checkbashisms脚本也会对其进行标记:

'\s\|\&' =>                    q<pipelining is not POSIX>,
Run Code Online (Sandbox Code Playgroud)

来源