Яка різниця між:
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 його не буде.