进程替换 - tr表示'额外操作数/ dev / fd / 63'

时间:2013-02-18 17:21:15

标签: bash process-substitution

我很难理解过程替代。据我所知,

echo abcd | tr -d 'b'
tr -d 'b' <(echo abcd)

应该都给出相同的输出。但第一个工作(输出是'acd'),但第二个说

tr: extra operand '/dev/fd/63'

这是为什么? tr不通过管道接收'abcd',而不是'/ dev / fd / 63'吗?

1 个答案:

答案 0 :(得分:4)

进程替换的工作方式是,Bash会将<(echo abcd)替换为(例如)/dev/fd/63,其中大多数常见的* nix实用程序会将其视为文件名并打开而不是标准输入。但是,tr 接受文件名参数; 采用标准输入。

要在标准输入上传递<(echo abcd)的结果,您可以使用其他<

tr -d b < <(echo abcd)