[英]What does <() do in Bash?
在 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並將其輸出作為一種文件(不是標准重定向)提供給命令。
它等同於運行(除非它在可能的情況下使用管道而不是臨時文件):
sort abc > /tmp/1
sort bcd > /tmp/2
join /tmp/1 /tmp/2
請注意,兩種類型的輸出都是作為要加入的文件名提供的,而不是作為標准重定向提供的。
(
list
)
是一個不同的結構,用於不同的目的。 它只是創建一個執行list的子shell,將其標准描述符提供給父shell。
這是bash手冊中的相關部分。
<(
command
)
是一個進程替換(參見man bash
的相應部分)。 基本上,命令運行並將其輸出饋送到命名管道(FIFO),然后整個構造被管道名稱替換,從而導致join /dev/fd/
x
/dev/fd/
y
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.