Zasadniczo możesz go użyć w dowolnym momencie, kiedy chcesz „wstrzyknąć” zmienne środowiskowe przekazane do skryptu powłoki (jako argumenty) tak, jakby były ustawione w środowisku przez export, ale bez konieczności stałego umieszczania ich na exportliście przed uruchomieniem poleceń .
UWAGA: Istnieje również długa forma -kprzełącznika set -o keyword.
Przykład
$ cat cmd1.bash
#!/bin/bash
echo $VARCMD
Teraz jeśli set -k:
$ set -k; ./cmd1.bash VARCMD="hi"; set +k
hi
Ale gdybym tylko uruchomił powyższy skrypt:
$ ./cmd1.bash
$
Co robi eksport?
$ help export
...
Marks each NAME for automatic export to the environment of subsequently
executed commands. If VALUE is supplied, assign VALUE before exporting.
...
Więc jeśli mielibyśmy dodać export | grep VARdo naszego skryptu w ten sposób:
$ cat cmd2.bash
#!/bin/bash
echo $VARCMD
export | grep VAR
I ponownie przeprowadziliśmy powyższe testy:
$ set -k; ./cmd2.bash VARCMD="hi"; set +k
hi
declare -x VARCMD="hi"
Ale bez set -k:
$ ./cmd2.bash
$
Więc set -kpozwala nam tymczasowo wyeksportować zmienne w masie.
Inny przykład
$ cat cmd3.bash
#!/bin/bash
echo $VARCMD1
echo $VARCMD2
export | grep VAR
Kiedy ustawiamy wiele zmiennych, wszystkie są eksportowane:
$ set -k; ./cmd3.bash VARCMD1="hi" VARCMD2="bye"; set +k
hi
bye
declare -x VARCMD1="hi"
declare -x VARCMD2="bye"
Więc to tylko wstrzyknięcie wszystkich zmiennych środowiskowych?
Nie -k robi tutaj bardzo wyraźnej rzeczy. To tylko eksportowanie zmiennych, które były zawarte w wierszu poleceń, gdy polecenie zostało wykonane.
Przykład
Powiedzmy, że ustawiłem tę zmienną:
$ VARCMD1="hi"
Teraz, gdy uruchomimy to samo polecenie, pomijając VARCMD1="hi":
$ set -k; ./cmd3.bash VARCMD2="bye"; set +k
bye
declare -x VARCMD2="bye"
Ale dlaczego to istnieje?
Znalazłem to źródło, które trochę wyjaśnia tę funkcję, zatytułowane: „Ciągi parametrów przypisania parametru słowa kluczowego”. UWAGA: źródłowy adres URL używa adresu IP, więc nie mogę połączyć się z nim bezpośrednio tutaj w SE.
http://140.120.7.21/OpenSystem2/SoftwareTools/node16.html
Podczas programowania w dowolnym języku zmienna i jej przekazywanie wartości mają kluczowe znaczenie dla pisania niezawodnego kodu. Oprócz typów zmiennych całkowitoliczbowych i tablicowych wszystkie pozostałe zmienne powłoki przyjmują ciągi znaków jako swoje wartości. Mówiąc o języku programowania powłoki, aby zachować spójność, wolimy wyrażenie „parametr keyword”. Oto kilka punktów, na które należy zwrócić uwagę przy przypisywaniu wartości do parametrów słów kluczowych:
Aby uniknąć nieoczekiwanego efektu, zawsze umieszczaj podłańcuch przypisania parametru przed ciągiem poleceń.
W powłoce B przypisane wartości parametrów słów kluczowych zostaną zapisane w (lokalnych) zmiennych powłoki. W bash i ksh łańcuchy parametrów parametru słowa kluczowego poprzedzające polecenie nie będą przechowywane w zmiennych powłoki. Wpływają tylko na natychmiastowy rozwidlenie podprocesu w celu wykonania bieżącego polecenia. Sam wiersz ciągów przypisywania parametrów słów kluczowych jest przechowywany w (lokalnych) zmiennych powłoki. Ciągi przypisania parametrów słowa kluczowego mogą również pojawiać się jako argumenty w aliasach, deklarowaniu, składaniu, eksportowaniu, tylko do odczytu i wbudowanych poleceniach lokalnych. [Sekcja 3.4 podręcznika Bash Reference]
Ciągi przypisania parametrów słowa kluczowego będą traktowane jako argumenty do wykonania polecenia, jeśli są umieszczone po nazwie polecenia.
- Parametrami słów kluczowych można manipulować za pomocą polecenia set.
-kPozwala nam uruchomić 30-letni skrypty powłoki bez konieczności ich byłaby. Zamiast tegovar1=x var2=y command ...