Soweit ich die Bash-Dokumentation verstehe, sind beide | und <stdin umleiten. Also cmd | foo
und foo < <(cmd)
sollte mehr oder weniger gleichwertig sein. Für den Befehl bash-internal read scheint dies jedoch nicht der Fall zu sein. ZB wenn ich eintrete
a=""; b=""; read a b < <(echo a b); echo $a $b
es wird ausgedruckt a b
, während
a=""; b=""; echo a b | read a b; echo $a $b
druckt nichts aus. Auf der anderen Seite, wenn ich eintrete
a=""; b=""; cat < <(echo a b) >foo1
a=""; b=""; echo a b | cat > foo2
Die Dateien foo1 und foo2 sind genau gleich. Meine Frage lautet also: Was ist der Unterschied zwischen beiden Formularen, wenn der Lesebefehl beteiligt ist (oder allgemein)? Sie sollten genau dieselbe umgeleitete Eingabe sehen. Während das < <(...)
Formular funktioniert, finde ich es ziemlich unlesbar und würde es sehr bevorzugen, das Pipe-Formular zu verwenden.