Ви можете використовувати його в будь-який час, коли ви хочете "ввести" змінні середовища, передані в сценарій оболонки (як аргументи), як ніби вони були встановлені в середовищі через export
, але без того, щоб вони постійно перебували у export
списку до запуску команд .
Примітка: Там же довга форма -k
перемикача set -o keyword
.
Приклад
$ cat cmd1.bash
#!/bin/bash
echo $VARCMD
Тепер, якщо я set -k
:
$ set -k; ./cmd1.bash VARCMD="hi"; set +k
hi
Але якби я просто запустив описаний вище сценарій:
$ ./cmd1.bash
$
Що робить експорт?
$ help export
...
Marks each NAME for automatic export to the environment of subsequently
executed commands. If VALUE is supplied, assign VALUE before exporting.
...
Тож якби ми додати export | grep VAR
до нашого сценарію так:
$ cat cmd2.bash
#!/bin/bash
echo $VARCMD
export | grep VAR
І ми знову провели наші вище тести:
$ set -k; ./cmd2.bash VARCMD="hi"; set +k
hi
declare -x VARCMD="hi"
Але без set -k
:
$ ./cmd2.bash
$
Це set -k
дозволяє нам тимчасово експортувати змінні в масовій формі.
Ще один приклад
$ cat cmd3.bash
#!/bin/bash
echo $VARCMD1
echo $VARCMD2
export | grep VAR
Коли ми встановлюємо кілька змінних, всі вони експортуються:
$ set -k; ./cmd3.bash VARCMD1="hi" VARCMD2="bye"; set +k
hi
bye
declare -x VARCMD1="hi"
declare -x VARCMD2="bye"
Тож він просто вводить усі змінні середовища?
Ні -k
не робить дуже явної речі. Це лише експорт змінних, які були включені в командний рядок при виконанні команди.
Приклад
Скажіть, я встановив цю змінну:
$ VARCMD1="hi"
Тепер, коли ми запускаємо ту ж команду, опускаючи VARCMD1="hi"
:
$ set -k; ./cmd3.bash VARCMD2="bye"; set +k
bye
declare -x VARCMD2="bye"
Але чому це існує?
Я знайшов це джерело, яке трохи пояснює цю функцію під назвою: "Рядки призначення параметрів ключового слова". ПРИМІТКА: URL-адреса джерела використовує IP-адресу, тому я не можу посилатися на неї безпосередньо тут, в SE.
http://140.120.7.21/OpenSystem2/SoftwareTools/node16.html
При програмуванні на будь-якій мові змінна та передача її значення є критично важливими для написання надійного коду. Крім типів змінних цілих чи масивів, всі інші змінні оболонки приймають рядки як свої значення. Коли ми говоримо про мову програмування оболонок, щоб бути послідовними, ми віддаємо перевагу фразі "параметр ключових слів". Ось кілька моментів, на які слід звернути увагу при призначенні значень параметрам ключового слова:
Щоб уникнути будь-якого несподіваного ефекту, завжди розміщуйте підрядок призначення параметрів перед командним рядком.
У оболонці B призначені значення параметрів ключових слів зберігатимуться у (локальних) змінних оболонок. У bash та ksh рядки присвоєння параметрів ключового слова, що передують команді, не зберігатимуться в змінних оболонки. Вони впливають лише на негайний підпроцес, розроблений для виконання поточної команди. Рядок призначення рядків ключових слів лише в рядках зберігається у змінних (локальних) оболонок. Рядки присвоєння параметрів ключового слова можуть також з’являтися як аргументи до псевдоніму, оголошувати, набирати набір, експортувати, лише для читання та локальних вбудованих команд. [Розділ 3.4 Довідкового посібника Баша]
Рядки призначення параметрів ключового слова будуть розглядатися як аргументи для команди, яка виконується, якщо вони розміщені після імені команди.
- Параметри ключового слова можуть управляти командою set.
-k
дозволяє нам запускати 30-річні сценарії оболонки без необхідності їх рефактор. Передайте тимчасові змінні середовища, використовуючи замість синтаксису префікса:var1=x var2=y command ...