Dlaczego dane wejściowe do „odczytu” działają tylko po wprowadzeniu do konstrukcji „podczas odczytu…”?

Próbowałem odczytać dane wejściowe do zmiennych środowiskowych z danych wyjściowych programu w następujący sposób:

echo first second | read A B ; echo $A-$B 

A wynikiem jest:

-

Zarówno A, jak i B są zawsze puste. Czytałem o bashie wykonywania komend potokowych w podpowłoce i to w zasadzie uniemożliwiało komuś wejście do odczytu. Jednak następujące:

echo first second | while read A B ; do echo $A-$B ; done

Wydaje się działać, wynikiem jest:

first-second

Czy ktoś może wyjaśnić, jaka jest tutaj logika? Czy to, że polecenia wewnątrzwhile ...doneonstrukcja @ jest faktycznie wykonywana w tej samej powłoce coecho a nie w podpowłoce?

questionAnswers(4)

yourAnswerToTheQuestion