Ответ 1
Существует разница между переменной и переменной окружения. Если вы выполняете . foo.sh
и foo.sh
содержит строку FOO=value
, тогда переменная FOO
будет назначена в текущем процессе. Это не переменная среды. Чтобы стать переменной окружения (и, следовательно, быть доступной для суб-оболочек), она должна быть экспортирована. Тем не менее, оболочки предоставляют опцию, которая делает все назначения переменных способствующими переменной переменной окружения, поэтому если вы просто выполните:
set -a
. foo.sh
set +a
тогда все назначения переменных в foo.sh будут сделаны переменными среды в текущем процессе. Обратите внимание, что это не совсем так: в bash экспорт переменной делает ее переменной environement в текущей оболочке, но в других оболочках (например, тире) экспорт этой переменной не делает ее переменной среды в текущей оболочке, (Однако это заставляет его устанавливать его в среде подоболочек.)