Я предполагаю, что вы исходите из фона Windows. Поэтому я сравню их (я тоже новичок в Linux). Я нашел ответ пользователя на мой комментарий, который может быть полезен для выяснения ситуации.
В Windows переменная может быть постоянной или нет. Термин переменная среды включает в себя переменную, установленную в оболочке cmd с помощью команды SET, а также когда переменная устанавливается в графическом интерфейсе Windows, то есть устанавливается в реестре, и становится доступным для просмотра в новых окнах cmd.
Например, документация для команды set в Windows Отображает, задает или удаляет переменные среды. При использовании без параметров set отображает текущие настройки среды.
В Linux set не отображает переменные среды. Он отображает переменные оболочки, которые он не вызывает/не называет переменными среды. Кроме того, Linux не использует set для установки переменных (кроме позиционных параметров и опций оболочки, которые я объясню в качестве примечания в конце), только для их отображения и даже тогда только для отображения переменных оболочки. 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
.
Переменные среды устанавливаются с помощью export. Экспорт также устанавливает переменную оболочки.
Здесь вы видите переменную оболочки 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
$
Другие полезные QnAs:
Примечание. Один момент, который немного уточняет и несколько корректирует то, что я написал, заключается в том, что в Linux bash «set» может использоваться для установки позиционных параметров и параметров/атрибутов оболочки, и технически оба они являются переменными, хотя справочные страницы могут не описывать их как таковые.
Но все же, как уже упоминалось, set не устанавливает переменные оболочки или переменные среды). Если вы сделаете set asdf
, то он установит $1 в asdf, а если вы сделаете echo $1
, вы увидите asdf.
Если вы сделаете set a=5
, он не установит переменную a равной 5. Он установит позиционный параметр $1 равным строке a=5. Так что, если вы когда-либо видели set a=5 в Linux, это, вероятно, ошибка, если только кто-то действительно не хотел, чтобы строка a=5 находилась в $1.
Другая вещь, которую может установить set в Linux, это параметры/атрибуты оболочки. Если вы установите -o, вы увидите их список. И вы можете сделать, например, set -o verbose
, off, чтобы включить многословие (кстати, по умолчанию он выключен, но это не имеет значения). Или вы можете сделать set +o verbose
, чтобы отключить подробные сведения. Windows не имеет такого использования для своей команды set.
person
barlop
schedule
16.07.2015