0
#1
f() {
cat "$1" >"$x"
}
#2
x=>(tr '[:lower:]' '[:upper:]') f <(echo 'hi there')
#2哪部分首先執行? x=>(tr '[:lower:]' '[:upper:]')
或f <(echo 'hi there')
。 #2是複合複合還是單一命令?「var =>(...)somecommand」如何工作?
一般來說,順便說一句,在變量中存儲過程替換句柄並不是特別安全。只要進程替換的重定向離開作用域(在本例中,該作用域是單個命令),FIFO就會關閉,從而使句柄不再可用。 –
...如果你在這裏運行'{... multiline block ...; } 3>(...)',那麼你*知道*你的進程替換將在範圍內,並在FD 3上可用於整個塊。更好的實踐比開發變量和需要擔心變量範圍和流程替代的範圍不同。 –
(你在做什麼是安全的*在這裏*特別是因爲賦值是單一命令的一部分,而不是複合命令,它的作用域是保證進程替換保持可用的單一命令;如果你做到了'''''''''''x =>(tr'[:lower:]''[:upper:]'); f <(echo'hi there')',你會看到這個變化:變量仍然可用,但流程替代將不再運行)。 –