При настройке переменной в .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
плохой пример переменной, которая будет экспортирована как переменная окружения. Это имеет смысл только для дочерних процессов, которые являются оболочками, и интерпретируется по-разному различными оболочками (например, bash и dash). Лучше всего просто установить его как обычную переменную оболочки в.bashrc
. Лучшие примеры переменных среды включают в себяHOME
,PATH
,EDITOR
и т.д.Кажется, что оба прекрасно работают, но использование экспорта обеспечит доступность переменной для подоболочек и других программ. Чтобы проверить это, попробуйте это.
Добавьте эти две строки в ваш файл .bashrc
Затем откройте новую оболочку.
Запуск
echo $TESTVAR
иecho $MYTESTVAR
покажет содержимое каждой переменной. Теперь внутри этой же оболочки удалите эти две строки из файла .bashrc и запустите,bash
чтобы запустить подоболочку.Запуск
echo $TESTVAR
будет иметь пустой вывод, но запускecho $MYTESTVAR
будет отображать «с экспортом»источник