Ответы:
Изменения переменных среды в скрипте влияют только на вызывающую оболочку, если вы вызываете скрипт следующим образом:
. ./script.sh
Или же:
source ./script.sh
Не:
bash ./script.sh
Или же:
./script.sh
Это связано с тем, что первые два способа запускают сценарий в текущей оболочке, а два последних запускают подоболочку, а изменения переменных среды не распространяются вверх из подоболочек.
! /bin/bash. Разве это не должно быть #!/bin/bash? То, что вы говорите, правильно, но, похоже, у этого скрипта есть несколько проблем.
! /bin/bashбудет работать bashи отрицать свой статус выхода. Эта новая оболочка на первый взгляд может быть неотличима от старой. ОП может подумать, что все было получено, и попробовать echo $r; он вернет пустую строку, как будто ваше решение ничего не изменило. export r=1будет получен в старой оболочке только после выхода из новой оболочки.
! /bin/bash(что неверно) на#!/bin/bashправильный?