Кто-то сказал мне, что:
BASH это не переменная окружения, это переменная оболочки
Какая разница?
bash
command-line
environment-variables
Том Брито
источник
источник
Ответы:
$BASH
является локальной переменной, которая действительна только в текущей (bash) оболочке.Переменные среды, такие как
$SHELL
действительны для всей системы. В текущей оболочке Bash$BASH
указывает на путь выполнения bash , тогда как$SHELL
указывает на оболочку, определенную по умолчанию (которая может иметь одинаковое значение).Для объяснения переменных среды смотрите Переменные среды в Справке Ubuntu.
источник
Переменная окружения доступна глобально в программе и в дочерних программах. Переменная оболочки доступна только в текущей оболочке. Чтобы сделать переменную оболочки доступной в качестве переменной среды, используйте
export VARNAME
(без доллара$
).Примеры для уточнения:
Другой способ определить переменную среды:
источник
export
не обязательно устанавливать переменную окружения. stackoverflow.com/questions/7411455/…export
устанавливает переменную окружения для дочерних процессов. Пост, на который вы ссылаетесь, не противоречит этому ответу. Не могли бы вы пояснить, почему вы считаете его неправильным?export
абсолютно установить переменную средыЕсть разница. Переменные оболочки и переменные среды объяснят это лучше, чем я, но вот выдержка из этого:
источник
Переменная оболочки: Краткосрочная, Применяется только к текущему экземпляру оболочки, Не применимо для всей системы
Переменная среды: долгосрочное использование, действительная система, глобально допустимая
По соглашению переменные оболочки имеют свое имя в нижнем регистре, а Envn. Переменные пишутся в верхнем регистре
источник
Чтобы ответить на этот вопрос, сначала попытайтесь понять область действия переменной.
Когда вы создаете новую переменную, как
SOME_ENV_VARIABLE="testing.txt"
она находится вSHELL scope
, это означает, что к нему может получить доступ тот экземпляр оболочки, в который вошел пользователь. Например, при изменении экземпляра вы открываете новый терминал или меняете оболочку (например, вы переключиться наcsh
) вы не можете получить доступ к этой переменной.Когда вы экспортируете эту переменную, как
export SOME_ENV_VARIABLE
эта переменная теперь доступна в области видимости среды, это означает, что в этом случае, если вы измените оболочку, вы все равно сможете получить доступ к этой переменной. Давайте попробуем разобраться со следующим примером:Аналогия: предположим, у вас есть квартира с двумя спальнями, и вы делите ее с другим соседом по комнате. Доступ к общей области может получить кто угодно, но не ваши спальни, переменная окружения похожа на общую область, а переменная оболочки похожа на спальню, если вы хотите что-то в общей области, к ней может получить доступ кто угодно, но если вы храните ее в своей спальне, она может только быть доступным для вас.
Помните, что если вы откроете новый терминал, вы не сможете получить доступ ни к одной из переменных, потому что вы меняете этот экземпляр . Для этого вы должны добавить свои переменные в или
.profile
или.bashrc
(если вы используете bash).источник