Определение переменной с или без экспорта - PullRequest
831 голосов
/ 21 июля 2009

Для чего export? 1002 *

В чем разница между:

export name=value

и

name=value

Ответы [ 14 ]

2 голосов
/ 11 июля 2016

Два из создателей UNIX, Брайан Керниган и Роб Пайк, объясняют это в своей книге «Среда программирования UNIX». Google для названия, и вы легко найдете PDF-версию.

Они обращаются к переменным оболочки в разделе 3.6 и фокусируются на использовании команды export в конце этого раздела:

Если вы хотите сделать значение переменной доступным в подоболочках, следует использовать команду экспорта оболочки. (Вы можете подумать, почему нет способа экспортировать значение переменной из вложенной оболочки в ее родительский объект).

2 голосов
/ 05 февраля 2014

Просто чтобы показать разницу между экспортированной переменной, находящейся в среде (env), и неэкспортированной переменной, не находящейся в среде:

Если я сделаю это:

$ MYNAME=Fred
$ export OURNAME=Jim

тогда в env появляется только $ OURNAME. Переменная $ MYNAME отсутствует в env.

$ env | grep NAME
OURNAME=Jim

но переменная $ MYNAME существует в оболочке

$ echo $MYNAME
Fred
1 голос
/ 04 сентября 2013

Хотя это явно не упоминается в обсуждении, НЕ обязательно использовать экспорт при порождении подоболочки изнутри bash, поскольку все переменные копируются в дочерний процесс.

0 голосов
/ 10 декабря 2014

По умолчанию переменные, созданные в скрипте, доступны только текущей оболочке; дочерние процессы (вложенные оболочки) не будут иметь доступа к значениям, которые были установлены или изменены. Чтобы дочерние процессы могли видеть значения, необходимо использовать команду экспорта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...