Під час налаштування змінної в .bashrc, чи слід це використовувати?
export VAR=value
Або цього буде достатньо?
VAR=value
Яка саме різниця (якщо така є)?
Під час налаштування змінної в .bashrc, чи слід це використовувати?
export VAR=value
Або цього буде достатньо?
VAR=value
Яка саме різниця (якщо така є)?
Відповіді:
export VAR=value
Робимо
VAR=value
встановлює лише змінну протягом тривалості сценарію ( .bashrcу цьому випадку). У дочірніх процесах (якщо такі є) сценарію не буде визначено VAR, і як тільки сценарій завершиться, VARйого не буде.
export VAR=value
явно додає VARдо списку змінних, які передаються дочірнім процесам. Хочете спробувати? Відкрийте оболонку, зробіть
PS1="foo > "
bash --norc
Нова оболонка отримує підказку за замовчуванням. Якщо замість цього ви робите щось на кшталт
export PS1="foo > "
bash --norc
нова оболонка отримує підказку, яку ви просто встановили.
Оновлення: як зазначає Іен Келінг нижче, змінні, встановлені у .bashrcзбереженій оболонці .bashrc. Більш загально, коли оболонка джерела скрипту (за допомогою source scriptnameкоманди) змінні, встановлені в сценарії, зберігаються протягом життя оболонки.
PS1є поганим прикладом змінної, яку потрібно експортувати як змінну середовища. Це має значення лише для дитячих процесів, які є оболонками, і це по-різному інтерпретується різними оболонками (наприклад, удар і тире). Найкраща практика - просто встановити його як звичайну змінну оболонки в .bashrc. Кращі приклади змінних середовища включають в себе HOME, PATH, EDITORі т.д.
Обидва, здається, працюють просто чудово, але використання експорту забезпечить зміну доступною для підрозділів та інших програм. Щоб перевірити це, спробуйте це.
Додайте ці два рядки до файлу .bashrc
TESTVAR="no export"
export MYTESTVAR="with export"
Потім відкрийте нову оболонку.
Запуск echo $TESTVARі echo $MYTESTVARпокаже вміст кожної змінної. Тепер всередині цієї самої оболонки видаліть ці два рядки з вашого файлу .bashrc і запустіть, bashщоб запустити нижню частину.
Біг echo $TESTVARматиме порожній вихід, але біг echo $MYTESTVARвідображатиметься "з експортом"