Что является различием между:
a=b
и
export a=b
В ударе?
Я понимаю, что они оба определяют переменные среды, но я не полностью понимаю различия.
export
распространяет переменную к подпроцессам.
Например, если Вы сделали
FOO=bar
затем подпроцесс, который проверил на НЕЧТО, не найдет переменную тогда как
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
.
Кроме того, если Вы хотите иметь переменную в наличии для оболочки вызова, не используя экспорт, можно сделать это:
Файл a.ksh -
#!/bin/ksh
FOO=bar
На подсказке выполненной, это
> . a.ksh
Это выполнит команды в той же оболочке, и $FOO будет доступен.
Принимая во внимание, что,
> a.ksh
Сделает $FOO доступным только в a.ksh, после вызова к a.ksh, он не существовал бы.