Какая разница между:
a=b
а также
export a=b
В баш?
Я понимаю, что они оба определяют переменные среды, но я не до конца понимаю разницу.
Какая разница между:
a=b
а также
export a=b
В баш?
Я понимаю, что они оба определяют переменные среды, но я не до конца понимаю разницу.
Ответы:
export
распространяет переменную в подпроцессы.
Например, если вы сделали
FOO=bar
тогда подпроцесс, который проверил FOO, не найдет переменную, тогда как
export FOO=bar
позволит подпроцессу найти его.
Но если FOO
она уже была определена как переменная среды, она FOO=bar
изменит значение этой переменной среды.
Например:
FOO=one # Not an environment variable
export FOO # Now FOO is an environment variable
FOO=two # Update the environment variable, so sub processes will see $FOO = "two"
Старые оболочки не поддерживали export FOO=bar
синтаксис; ты должен был написать FOO=bar; export FOO
.
export
", вы определяете не переменную окружения, а просто переменную оболочки. Переменные оболочки доступны только для процесса оболочки; Переменные среды доступны для любого последующего процесса, а не только для оболочек. Кроме того, подоболочки - это команды, содержащиеся в скобках, которые имеют доступ к переменным оболочки, тогда как речь идет о дочерних процессах, которые оказываются оболочками.
Также, если вы хотите, чтобы переменная была доступна для вызывающей оболочки без использования экспорта, вы можете сделать это:
Файл a.ksh - это
#!/bin/ksh
FOO=bar
В командной строке запустите это
> . a.ksh
Это запустит команды в той же оболочке, и $ FOO будет доступен.
В то время как,
> a.ksh
Сделает $ FOO доступным только в пределах a.ksh, после вызова a.ksh он не будет существовать.