Какая разница между:
a=b
а также
export a=b
В баш?
Я понимаю, что они оба определяют переменные среды, но я не до конца понимаю разницу.
bash
shell
process
environment-variables
Адам Матан
источник
источник
Ответы:
export
распространяет переменную в подпроцессы.Например, если вы сделали
тогда подпроцесс, который проверил FOO, не найдет переменную, тогда как
позволит подпроцессу найти его.
Но если
FOO
она уже была определена как переменная среды, онаFOO=bar
изменит значение этой переменной среды.Например:
Старые оболочки не поддерживали
export FOO=bar
синтаксис; ты должен был написатьFOO=bar; export FOO
.источник
export
", вы определяете не переменную окружения, а просто переменную оболочки. Переменные оболочки доступны только для процесса оболочки; Переменные среды доступны для любого последующего процесса, а не только для оболочек. Кроме того, подоболочки - это команды, содержащиеся в скобках, которые имеют доступ к переменным оболочки, тогда как речь идет о дочерних процессах, которые оказываются оболочками.Если вы не используете
export
, вы не определяете переменную окружения; просто переменная оболочки.Переменные оболочки доступны только для процесса оболочки; Переменные среды доступны для любого последующего процесса, а не только для оболочек.
источник
Также, если вы хотите, чтобы переменная была доступна для вызывающей оболочки без использования экспорта, вы можете сделать это:
Файл a.ksh - это
В командной строке запустите это
Это запустит команды в той же оболочке, и $ FOO будет доступен.
В то время как,
Сделает $ FOO доступным только в пределах a.ksh, после вызова a.ksh он не будет существовать.
источник
В дополнение к тому, на что уже был дан ответ, оба эти утверждения не обязательно определяют (то есть создают против набора) переменную среды, поскольку «а» может уже существовать как переменная оболочки или среды.
В последнем случае оба утверждения строго эквивалентны.
источник