我很难理解过程替代。据我所知,
echo abcd | tr -d 'b'
tr -d 'b' <(echo abcd)
应该都给出相同的输出。但第一个工作(输出是'acd'),但第二个说
tr: extra operand '/dev/fd/63'
这是为什么? tr不通过管道接收'abcd',而不是'/ dev / fd / 63'吗?
答案 0 :(得分:4)
进程替换的工作方式是,Bash会将<(echo abcd)
替换为(例如)/dev/fd/63
,其中大多数常见的* nix实用程序会将其视为文件名并打开而不是标准输入。但是,tr
不接受文件名参数; 仅采用标准输入。
要在标准输入上传递<(echo abcd)
的结果,您可以使用其他<
:
tr -d b < <(echo abcd)