Змінні оболонки
Змінні оболонки - це змінні, сфера застосування яких знаходиться в поточному сеансі оболонки, наприклад, в інтерактивному сеансі оболонки або скрипті.
Ви можете створити змінну оболонки, призначивши значення невикористаному імені:
var="hello"
Використання змінних оболонок - це відстеження даних у поточному сеансі. Змінні оболонки зазвичай мають назви з малої літери.
Змінні середовища
Змінна середовища - це змінна оболонка, яка експортується. Це означає, що вона буде видима як змінна не тільки в сеансі оболонки, який її створив, але і для будь-якого процесу (не тільки оболонок), який розпочався з цього сеансу.
VAR="hello" # shell variable created
export VAR # variable now part of the environment
або
export VAR="hello"
Після того, як змінна оболонки експортується, він залишається на експорт , поки не буде знята з охорони, або до його «експорт властивість» не видаляється (з export -n
в bash
), так що зазвичай немає необхідності повторно експортувати його. Видалення змінної з unset
її видаленням (незалежно від того, чи є це змінна середовище чи ні).
Масиви та асоціативні хеші в bash
інших оболонках можуть не експортуватися, щоб стати змінними середовища. Змінні середовища повинні бути простими змінними, значення яких є рядками, і вони часто мають назви, що складаються з великих літер.
Використання змінних оточуючих середовищ полягає в тому, щоб відслідковувати дані в поточному сеансі оболонки, а також дозволяти будь-якому запущеному процесу брати частину цих даних. Типовим випадком цього є PATH
змінна середовище, яка може бути встановлена в оболонці і пізніше використана будь-якою програмою, яка хоче запускати програми, не вказуючи повний шлях до них.
Збір змінних середовища в процесі часто називають "середовищем процесу". У кожного процесу є своє середовище.
Змінні середовища можуть бути "перенаправлені", тобто дочірній процес ніколи не може змінювати змінні середовища в його батьківському процесі, і крім налаштування середовища для дочірнього процесу при його запуску, батьківський процес може не змінювати існуюче середовище дитячий процес.
Змінні середовища можуть бути перелічені env
(без жодних аргументів). Крім цього, вони виявляються такими ж, як неекспортовані змінні оболонки в сеансі оболонки. Це трохи особливо для оболонки, оскільки більшість інших мов програмування зазвичай не змішують "звичайні" змінні зі змінними середовища (див. Нижче).
env
може також використовуватися для встановлення значень однієї або декількох змінних середовища в середовищі процесу, не встановлюючи їх у поточному сеансі:
env CC=clang CXX=clang++ make
Це починається make
зі змінної середовища, CC
встановленої на значення clang
та CXX
встановленої на clang++
.
Він також може бути використаний для очищення середовища для процесу:
env -i bash
Це починається, bash
але не переносить поточне середовище в новий bash
процес (він все одно матиме змінні середовища, оскільки він створює нові з сценаріїв ініціалізації оболонок).
Приклад різниці
$ var="hello" # create shell variable "var"
$ bash # start _new_ bash session
$ echo "$var" # no output
$ exit # back to original shell session
$ echo "$var" # "hello" is outputted
$ unset var # remove variable
$ export VAR="hello" # create environment variable "VAR"
$ bash
$ echo "$VAR" # "hello" is outputted since it's exported
$ exit # back to original shell session
$ unset VAR # remove variable
$ ( export VAR="hello"; echo "$VAR" ) # set env. var "VAR" to "hello" in subshell and echo it
$ echo "$VAR" # no output since a subshell has its own environment
Інші мови
У більшості мов програмування є функції бібліотеки, що дозволяє отримувати та встановлювати змінні середовища. Зауважте, що оскільки змінні середовища зберігаються як просте співвідношення ключ-значення, вони зазвичай не є "змінними" мови. Програма може отримати значення (яке завжди є символьним рядком), що відповідає ключу (назва змінної середовища), але потім доведеться перетворити його в ціле число або будь-який тип даних, на який мова очікує, що це значення має.
У C, змінні оточення можуть бути доступні з допомогою getenv()
, setenv()
, putenv()
і unsetenv()
. Змінні, створені за допомогою цих процедур, успадковуються так само, як і будь-який процес, який запускається програма C.
Інші мови можуть мати спеціальні структури даних для виконання того ж самого, як %ENV
хеш в Perl, або ENVIRON
асоціативний масив у більшості реалізацій awk
.