Я пытаюсь читать входные переменные среды из вывода программы следующим образом:
echo first second | read A B ; echo $A-$B
И результат:
-
Оба A и B всегда пусты. Я читал о bash выполнении команд с каналами в суб-оболочке и в основном предотвращал чтение из ввода канала. Однако, следующее:
echo first second | while read A B ; do echo $A-$B ; done
Кажется, что работает, результат:
first-second
Может кто-нибудь объяснить, что здесь является логикой? Является ли это тем, что команды внутри конструкции while
... done
фактически выполняются в той же оболочке, что и echo
, а не в под-оболочке?