Я пытался понять, как «пока читал» работает в bash, и наткнулся на поведение, которое не могу объяснить:
root@antec:/# var=old_value
root@antec:/# echo "new_value" | read var && echo $var
old_value
root@antec:/#
Оно отлично работает с «пока читается»:
root@antec:/# var=old_value
root@antec:/# echo "new_value" | while read var; do echo $var; done
new_value
root@antec:/#
Может кто-нибудь объяснить, почему это не работает, когда read используется без while? Более того, я не понимаю, как значение «var» в основной оболочке можно увидеть из якобы подоболочки после трубы ..
Спасибо