export VARIABLE_NAME='some value'
это способ установить переменную среды в любой POSIX-совместимой оболочке ( sh
, dash
, bash
, ksh
, и т.д .; также ЗШ). Если переменная уже имеет значение, вы можете использовать ее, export VARIABLE_NAME
чтобы сделать ее переменной среды без изменения ее значения.
Оболочки Bourne до POSIX не поддерживали это, поэтому вы увидите сценарии, которые избегают export VARIABLE_NAME='some value'
и используют VARIABLE_NAME='some value'; export VARIABLE_NAME
вместо этого. Но снаряды до POSIX Борна в наше время чрезвычайно редки.
setenv VARIABLE_NAME='some value'
синтаксис csh для установки переменной окружения setenv
не существует в sh, а csh крайне редко используется в сценариях и превосходит bash для интерактивного использования в течение последних 20 лет (и zsh еще дольше), поэтому вы можете забыть об этом, если не столкнетесь с ним.
Команда env
очень редко полезна, за исключением строк Шебанга . Когда вызывается без аргументов, он отображает среду, но export
делает это лучше (сортируется и часто заключается в кавычки для устранения неоднозначности строк в значениях и строк, которые разделяют значения). Когда вызывается с аргументами, он запускает команду с дополнительными переменными окружения, но та же команда без нее env
также работает ( VAR=value mycommand
запускается mycommand
с VAR
установленным значением value
, как и env VAR=value mycommand
). Причиной env
полезности строки shebang является то, что она выполняет PATH
поиск, и при вызове с именем команды не происходит ничего другого. Команда env
может быть полезна для запуска команды только с несколькими переменными среды с-i
или без параметров для отображения среды, включая переменные с недопустимыми именами, которые оболочка не импортирует.
Жиль "ТАК - прекрати быть злым"
источник
VAR=asdf
действительно ли обновляется окружение, если оноVAR
уже было в окружении. (Это не было правдой в оригинальной оболочке Bourne.)Есть несколько вопросов с ответами, которые отвечают на это:
Попытка понять .bashrc, env и export
Разница между экспортируемыми переменными оболочки и теми, которых нет в bash
Какая разница в использовании между переменными оболочки и переменными среды?
команда bash setenv не найдена
В чем разница между "экспорт" и "setenv"?
(и т.д.)
источник