Kiedy wykonujesz set -a var=99
, zdarzają się trzy różne rzeczy (związane z twoim pytaniem):
- Ustaw opcję (
-a
) (odwróć wykonując set +a
), aby wyeksportować zmienne.
- Parametry pozycji są „ustawiane” zgodnie z opcjami (
$1
ustawione na var=99
).
- Podkreślenie zmiennej powłoki
$_
jest ustawiane na ostatni parametr (rozwinięty).
zestaw -a
Wykonanie set -a
oznacza wszystkie wyeksportowane zmienne (nowe lub zmienione) (we wszystkich powłokach, z wyjątkiem csh
niektórych powłok pokrewnych).
$ set -a
$ myvariable=wer
$ env | grep myvariable
myvariable=wer
Aby odzyskać z tego ustawienia, wystarczy zmienić -
Do +
:
$ set +a
$ unset myvariable # to erase it from the environment if it
# was exported before the change of set +a
$ myvariable=456544654 # A new value of the variable.
$ env | grep "variable" # No output means the var does not exist
# in the current environment
ustaw var = 99
Tak naprawdę powinno być, set -- var=99
aby uniknąć interpretacji opcji (a zestaw ma dużo) z wartościami rozpoczynającymi się od myślnika ( -
).
Ustawia listę argumentów (listę parametrów pozycyjnych) na tę po --
. Jest to ważne we wszystkich rozsądnych powłokach (nie w csh i in.). Argumenty pozycyjne są drukowane z „$ @” (lub podobnym „$ *”, nie równym).
$ set -- a=1 b=2 c=3
$ echo "$@"
a=1 b=2 c=3
_ = ostatni_argument
A wartość wewnętrznej zmiennej powłoki _
zmienia się na ostatni argument wykonywanego wiersza. To jest nie prawda, w prawie wszystkich muszli (JSH, jesion, Yash, myślnik, lksh, mksh, ksh93, attsh i csh tcsh) oraz oczywiście z wyjątkiem bash.
$ echo one two last argument
one two last argument
$ echo "$_"
argument
$ echo This is a new: last_argument
This is a new: last_argument
$ echo "$_"
last_argument
Należy pamiętać, że wartość w $_
to wartość po rozwinięciu:
$ a="A New_Argument"
$ echo Something else to test: "$a"
Something else to test: A New_Argument
$ echo "$_"
A New_Argument
Dlatego po wykonaniu:
$ set -a myvar=99; set | grep 'myvar'
_=myvar=99
Otrzymasz opis zmiennej powłoki „$ _”. Działa to również:
$ set -a myvar=99; declare -p _
declare -- _="myvar=99"