Jest to zależne od powłoki i nieudokumentowane AFAICS. W kshoraz bash, w pierwszym przypadku, foobędą dzielić to samo standardowe wejście bar. Będą walczyć o produkcję echo.
Na przykład w
$ seq 10000 | paste - <(tr 1 X)'
1 X
2 X042
3 X043
4 X044
5 X045
[...]
Widzisz dowody, które pasteczytają co drugi blok tekstu z seqdanych wyjściowych, podczas gdy trczytają pozostałe.
Za pomocą zshpobiera zewnętrzne wejście standardowe (chyba że jest to terminal, a powłoka nie jest interaktywna, w którym to przypadku jest przekierowywana /dev/null). ksh(skąd się wziął) zshi bashsą jedynymi powłokami podobnymi do Bourne'a z obsługą zastępowania procesów AFAIK.
W echo "bla" | bar < <(foo)zauważyć, że bardo standardowego wejścia będzie rura zasilany przez wyjście foo. To dobrze określone zachowanie. W takim przypadku wydaje się, że foostdin jest rurą zasilaną przez echowszystkie ksh, zshi bash.
Jeśli chcesz zachować spójne zachowanie we wszystkich trzech powłokach i być przyszłościowym, ponieważ zachowanie może się zmienić, ponieważ nie jest udokumentowane, napisałbym to:
echo bla | { bar <(foo); }
Dla pewności foostdin jest także potokiem z echo(nie rozumiem jednak, dlaczego chcesz to zrobić). Lub:
echo bla | bar <(foo < /dev/null)
Aby upewnić się, fooże nie czyta z potoku z echo. Lub:
{ echo bla | bar 3<&- <(foo <&3); } 3<&0
Aby mieć foostandardowe wejście zewnętrzne, jak w obecnych wersjach zsh.