Различие между “a=b” и “экспортом a=b” в ударе

Что является различием между:

a=b

и

export a=b

В ударе?

Я понимаю, что они оба определяют переменные среды, но я не полностью понимаю различия.

51
задан 13.07.2016, 16:52

3 ответа

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.

55
ответ дан 07.12.2019, 08:28

Кроме того, если Вы хотите иметь переменную в наличии для оболочки вызова, не используя экспорт, можно сделать это:

Файл a.ksh -

#!/bin/ksh
FOO=bar

На подсказке выполненной, это

> . a.ksh

Это выполнит команды в той же оболочке, и $FOO будет доступен.

Принимая во внимание, что,

> a.ksh

Сделает $FOO доступным только в a.ksh, после вызова к a.ksh, он не существовал бы.

2
ответ дан 07.12.2019, 08:28

Если Вы не используете export, Вы не определяете переменную среды; просто переменная оболочки.

Переменные Shell только доступны процессу оболочки; переменные среды доступны любому последующему процессу, не просто окружает.

28
ответ дан 07.12.2019, 08:28

Теги

Похожие вопросы