|(管道)运算符的替代方法

|(管道)运算符的替代方法

我正在寻找|bash shell 中的运算符的替代方案,以便将命令的输出重定向为下一个命令的输入。还有其他替代方案吗?

就像是 :

command1 | command2 | command3

替代方法:

command1 X command2 X command3

X将代替使用|。是否可以避免使用|而将其替换为实际操作符?

答案1

相当于command1 | command2command2 < <(command1)

这也可以扩展到三个(或更多)命令。

command3 < <(command2 < <(command1))

$ lspci | grep 'Network'
 02:00.0 Network controller: Qualcomm Atheros AR9285 Wireless Network Adapter (PCI-Express) (rev 01)

$ grep 'Network' <(lspci)
 02:00.0 Network controller: Qualcomm Atheros AR9285 Wireless Network Adapter (PCI-Express) (rev 01)

$ lspci | grep 'Network' | grep -o 'controller'
 controller

$ grep -o 'controller' < <(grep 'Network' < <(lspci))
 controller

然而,正如 Oli 所说,尽管这可能会产生相同的输出,但从技术上讲它与管道并不相同。

<(..) 将内部命令输出的 STDOUT 转换为文件处理程序(即命令 grep 打开的文件处理程序)。当您通过管道传输时,读取命令直接从 STDIN 读取(STDIN 正在用管道传输的命令的 STDOUT 填充)。这些细微的差别对于只知道如何读取 STDIN 的命令来说可能很重要。

相关内容