()是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种语法