一尘不染

<()在Bash中做什么?

linux

在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)

是语法错误。请提示我!


阅读 343

收藏
2020-06-07

共1个答案

一尘不染

这称为过程替换。

<( list)是单个语法结构,在这种情况下,“ <”字符不是单独的符号。它执行 list
并将其输出作为文件(不是标准重定向)提供给命令。

它等效于运行(除了在可能的情况下使用管道而不是临时文件):

sort abc > /tmp/1
sort bcd > /tmp/2
join /tmp/1 /tmp/2

请注意,两种输出均以要连接的文件名形式提供,而不是以标准重定向的形式提供。

( list)是出于不同目的的不同构造。它只是创建一个执行 list 的子外壳,将其标准描述符提供给父外壳。

是bash手册中的相关部分。

2020-06-07