Я предполагаю, что вы исходите из фона Windows. Я сравню их (я тоже новичок в Linux). Я обнаружил, что ответ пользователя на мой комментарий был полезен при выяснении ситуации.
В Windows переменная может быть постоянной или нет. Термин «Переменная среды» включает в себя переменную, установленную в оболочке cmd с помощью команды SET, а также когда переменная устанавливается в графическом интерфейсе Windows, таким образом устанавливается в реестре и становится доступной для просмотра в новых окнах cmd. например, документация для команды set в Windows https://technet.microsoft.com/en-us/library/bb490998.aspx «Отображает, устанавливает или удаляет переменные среды. При использовании без параметров set отображает текущие настройки среды». В Linux set не отображает переменные среды, он отображает переменные оболочки, которые он не вызывает / не называет переменными среды. Кроме того, Linux не использует набор для установки переменных (кроме позиционных параметров и опций оболочки, которые я объясняю в виде примечания в конце), только для их отображения и даже тогда только для отображения переменных оболочки. Windows использует set для настройки и отображения, например, set a = 5, linux - нет.
В Linux, я думаю, вы могли бы создать сценарий, который устанавливает переменные при загрузке, например, /etc/profile
или, в /etc/.bashrc
противном случае, они не постоянные. Они хранятся в оперативной памяти.
В Linux существует различие между переменными оболочки и переменными среды. В Linux переменные оболочки находятся только в текущей оболочке, а переменные среды находятся в этой оболочке и во всех дочерних оболочках.
Вы можете просматривать переменные оболочки с помощью set
команды (хотя обратите внимание, что в отличие от Windows, переменные не устанавливаются в Linux с помощью команды set).
set -o posix; set
(выполнение этого set -o posix один раз помогает не отображать слишком много ненужного). Так set
отображаются переменные оболочки.
Вы можете просмотреть переменные среды с помощью env
команды
переменные оболочки устанавливаются, например, просто a = 5
переменные среды устанавливаются с помощью экспорта, экспорт также устанавливает переменную оболочки
Здесь вы видите переменную оболочки zzz, установленную с zzz = 5, и видите, что она отображается при запуске, set
но не отображается как переменная среды.
Здесь мы видим yyy, установленный с экспортом, так что это переменная среды. И посмотрите, как это отображается как в переменных оболочки, так и в переменных среды
$ zzz=5
$ set | grep zzz
zzz=5
$ env | grep zzz
$ export yyy=5
$ set | grep yyy
yyy=5
$ env | grep yyy
yyy=5
$
другие полезные темы
/unix/176001/how-can-i-list-all-shell-variables
/ubuntu/26318/environment-variable-vs-shell-variable-whats-the-difference
Обратите внимание: один момент, который немного уточняет и несколько корректирует то, что я написал, заключается в том, что в linux bash 'set' можно использовать для установки «позиционных параметров» и «параметров / атрибутов оболочки», и технически обоих из это переменные, хотя страницы руководства могут не описывать их как таковые. Но все же, как уже упоминалось, set не устанавливает переменные оболочки или переменные среды). Если вы это сделаете, set asdf
он установит $ 1 в asdf, а если вы это сделаете, echo $1
вы увидите asdf. Если вы это сделаетеset a=5
он не установит переменную a равной 5. Он установит позиционный параметр $ 1 равным строке «a = 5». Так что, если вы когда-либо видели установку a = 5 в Linux, это, вероятно, ошибка, если только кто-то действительно не хотел, чтобы строка a = 5 в $ 1. Другая вещь, которую может установить набор linux, - это параметры / атрибуты оболочки. Если вы установите -o, вы увидите их список. И вы можете, например set -o verbose
, выключить, чтобы включить подробный отчет (кстати, по умолчанию он выключен, но это не имеет значения). Или вы можете сделать, set +o verbose
чтобы отключить подробные сведения. Windows не имеет такого использования для своей команды set.