在superuser.com上的帖子答案中,我们看到了
join <(sort abc) <(sort bcd)
在将文件abc和bcd进行发送之前将它们排序。这导致了一个编程问题,更适合于stackoverflow。
这是如何运作的?<()构造到底是什么?它叫什么?
如果(sort abc)是在abc上运行sort并返回输出的合法调用,为什么我们需要<?
<
也就是说,以下两行是等效的
(sort abc) | join - <(sort bcd) join <(sort abc) <(sort bcd)
但
join (sort abc) (sort bcd)
是语法错误。请提示我!
这称为过程替换。
<( list)是单个语法结构,在这种情况下,“ <”字符不是单独的符号。它执行 list 并将其输出作为文件(不是标准重定向)提供给命令。
<(
list
)
它等效于运行(除了在可能的情况下使用管道而不是临时文件):
sort abc > /tmp/1 sort bcd > /tmp/2 join /tmp/1 /tmp/2
请注意,两种输出均以要连接的文件名形式提供,而不是以标准重定向的形式提供。
( list)是出于不同目的的不同构造。它只是创建一个执行 list 的子外壳,将其标准描述符提供给父外壳。
(
这是bash手册中的相关部分。