Насколько я могу судить, назначение переменной одинаково, если ему предшествует "экспорт" или ему не предшествует. Для чего это?
Что делает "экспорт" в программировании оболочки?
Ответ 1
Экспортируемые переменные (например, $HOME
и $PATH
) доступны для других программ.
Обычные (не экспортируемые) переменные недоступны для других программ.
$ env | grep '^variable='
$ # No environment variable called variable
$ variable=Hello # Create local (non-exported) variable with value
$ env | grep '^variable='
$ # Still no environment variable called variable
$ export variable # Mark variable for export to child processes
$ env | grep '^variable='
variable=Hello
$
$ export other_variable=Goodbye # create and initialize exported variable
$ env | grep '^other_variable='
other_variable=Goodbye
$
Для получения дополнительной информации см. запись для export
builtin в руководстве GNU Bash.
Обратите внимание, что неэкспортированные переменные будут доступны для подоболочек, выполняемых через ( ... )
и аналогичные обозначения:
$ othervar=present
$ (echo $othervar; echo $variable; variable=elephant; echo $variable)
present
Hello
elephant
$ echo $variable
Hello
$
Подселл не может влиять на переменную в родительской оболочке, конечно.
Некоторая информация о подоболочках содержится в разделе группировка команд и среда выполнения команд в руководстве Bash.
Ответ 2
он делает присваивание видимым для подпроцессов.
[email protected]:~/rentacoder/bin2txt$ foo=bar
[email protected]:~/rentacoder/bin2txt$ bash -c 'echo $foo'
[email protected]:~/rentacoder/bin2txt$ export foo
[email protected]:~/rentacoder/bin2txt$ bash -c 'echo $foo'
bar
Ответ 3
Ну, это вообще зависит от оболочки. Для bash
он отмечает переменную как "экспортируемую", что означает, что она будет отображаться в среде для любых дочерних процессов, которые вы запускаете.
Неэкспортные переменные видны только из текущего процесса (оболочки).
На странице bash
man:
export [-fn] [name[=word]] ...
export -p
Поставляемые имена помечены для автоматического экспорта в среду выполненных впоследствии команд.
Если указана опция
-f
, имена относятся к функциям. Если имена не указаны или включена опция-p
, выводится список всех имен, экспортируемых в эту оболочку.Параметр
-n
заставляет свойство экспорта удаляться из каждого имени.Если за именем переменной следует
=word
, значение переменной равноword
.
export
возвращает статус выхода 0, если не встречается недопустимая опция, одно из имен не является допустимым именем переменной оболочки, или-f
поставляется с именем, которое не является функцией.
Вы также можете установить переменные как экспортируемые с помощью команды typeset
и автоматически пометить все будущие творения или модификации как таковые, с помощью set -a
.
Ответ 4
Экспортированная переменная доступна для всех процессов в иерархии процессов. Например, данные, экспортируемые дочерним процессом, доступны для родительского процесса и наоборот.
Основным вариантом использования экспорта является обмен данными между двумя процессами.