()是subshell而<()多把subshell的stdout導出偽裝成檔案再用第一個<設定while-loop的stdin來自上述的(偽)檔案< <() 等效於 < input_text_file所以兩個< <不能連在一起,因為是不同功能用途XDDD當然你可以把這個while-loop重寫成 pipe 型式… 例如:cat list1.txt | while read -r -d $'\n' line; do (…略)雖然改成這樣好像比較直觀,但我覺得有時反而難用,因為…原本是cat跑在subshell裡,新的反而是pipe後面的while-loop跑在subshell裡,這樣我常在while-loop設定全域變數,會在script其他處取用不到(parent shell)會造成有些你想做的事情你達不到關於<()跟>()語法,有個名詞叫 "process substitution"可參考這篇:
http://goo.gl/5jBpn以及 Google Shell Style Guide:
http://goo.gl/0WN2r 的 Features & Bugs: Pipes to While若兩個<少隔空白而連在一起成<<則變成here document種語法