簡體   English   中英

<() 在 Bash 中做什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM