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
...done
onstrukcja @ jest faktycznie wykonywana w tej samej powłoce coecho
a nie w podpowłoce?