Это - выборка из страницы справочника Bash:
экспорт [-fn] [имя [=word]]...
экспорт-p
Предоставленные имена отмечены для автоматического экспорта в среду впоследствии выполняемых команд. Если-f опция дана, имена относятся к функциям...
Если Вам только нужна переменная в текущей среде, не необходимо использовать экспорт.
var=value
Править:
Без экспорта: текущая среда только. С экспортом: текущая среда и дочерние среды.
Вот демонстрация влияния экспорта на доступности переменной в дочерней среде, и это изменяется в дочерней среде, не влияют на родителя:
$ var1=123
$ export var2=456
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
$ var3=789 bash -c 'echo "child [$var1] [$var2] [$var3]"; var1=111; var2=222; var3=333; echo "child [$var1] [$var2] [$var3]"'
child [] [456] [789]
child [111] [222] [333]
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
После первого эха (echo "parent..."
) Вы видите "123" и "456" потому что оба var1
и var2
активны в текущей среде. Вы не видите значение для var3
потому что это еще не установлено.
После строки, которая запускается"var3=...
"Вы не видите значение для var1
потому что это не экспортировалось. Вы действительно видите значение для var2
потому что это экспортировалось. Вы видите значение для var3
потому что это было установлено для дочерней среды только.
(bash -c
эквивалентно запущению скрипта с содержанием аргумента -c
опция. Сценарий или другой исполняемый файл или, в этом случае, аргумент bash -c
становится ребенком текущей среды, которая, в результате, конечно, родитель ребенка.)
В "сценарии" изменяются значения переменной. Это теперь производит те новые значения.
После того как "сценарий" закончен, выполнение возвращается к родительской среде (командная строка в этом случае). После последнего эха Вы видите исходные значения, потому что изменения, внесенные в дочерней среде, не влияют на родителя.
Вы говорите это
Я всегда использую команду экспорта для установки переменной среды
По тому, как Вы сформулировали это, это кажется, что Вы действительно пытаетесь спросить, как Вы делаете переменную окружения, сохраняется. Сделать, который потребовал бы, чтобы Вы поместили Ваш export VAR="foo"
оператор в Вашем файле $HOME/.bash_profile (если Вы используете удар). Если Вы хотите, чтобы та переменная окружения сохранилась для всех пользователей, но корня, то добавьте его к/etc/profile. Если Вы хотите добавленный для пользователя root также, то установленный это в/root/.bash_profile.
Это будет работать на все оболочки входа в систему, где удар является предпочтительной оболочкой. Для не входят в оболочки, необходимо использовать .bashrc. У меня нет понимания для предложения для других оболочек :D
экспорт является самым простым способом сделать это, итак, почему бы не оставить его в этом?
export VARIABLE=value # for Bourne, bash, and similar shells
setenv VARIABLE value # for csh and similar shells
Можно также сделать что-то вроде этого:
VAR=val application
Например:
LANG=C ls --help
вывод на английском языке.
LANG=pl_PL ls --help
вывод на польском языке (если доступный).
В прошлом в sh Вы не могли сделать VAL=val экспорта. Вы имели к
VAL=val; export VAL