Думаю, ви виходите з фону Windows. Тож я буду їх протиставляти (я теж новачок у Linux). Відповідь користувача на мій коментар виявилася корисною для з’ясування ситуації.
У Windows змінна може бути постійною чи ні. Термін змінна середовища включає змінну, встановлену в оболонці cmd за допомогою команди SET, а також коли змінну встановлено в графічному інтерфейсі Windows, таким чином встановленому в реєстрі, і стає видимою в нових вікнах cmd. наприклад, документація для команди set у вікні https://technet.microsoft.com/en-us/library/bb490998.aspx "Відображає, встановлює або видаляє змінні середовища. Використовуючи без параметрів, набір відображає поточні налаштування середовища." У Linux набір не відображає змінні середовища, він відображає змінні оболонки, які він не викликає / називає змінними середовища. Крім того, Linux не використовує set для встановлення змінних (крім позиційних параметрів і параметрів оболонки, які я пояснюю як примітку в кінці), лише для їх відображення і навіть тоді лише для відображення змінних оболонки. Windows використовує набір для налаштування та відображення, наприклад, встановити 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 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.