Wenn Sie ausführen set -a var=99
, passieren drei verschiedene Dinge (im Zusammenhang mit Ihrer Frage):
- Eine festgelegte Option (
-a
) (rückgängig machen set +a
), um Variablen zu exportieren.
- Positionsparameter werden auf die folgenden Optionen "gesetzt" (
$1
gesetzt auf var=99
).
- Der Unterstrich der Shell-Variablen
$_
wird auf den letzten Parameter gesetzt (erweitert).
set -a
Die Ausführung set -a
markiert alle nachfolgenden (neuen oder geänderten) Variablen als exportiert (in allen Shells, außer csh
einigen verwandten Shells).
$ set -a
$ myvariable=wer
$ env | grep myvariable
myvariable=wer
Um diese Einstellung wiederherzustellen, ändern Sie einfach die Einstellung -
in a +
:
$ 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
setze var = 99
Das sollte eigentlich sein set -- var=99
, um die Interpretation einer Option (und Menge hat viel) mit Werten zu vermeiden, die mit einem Bindestrich ( -
) beginnen.
Setzt die Liste der Argumente (die Liste der Positionsparameter) auf die nach dem --
. Das gilt für alle vernünftigen Shells (nicht für csh et al). Positionsargumente werden mit "$ @" (oder ähnlichem "$ *", ungleich) gedruckt.
$ set -- a=1 b=2 c=3
$ echo "$@"
a=1 b=2 c=3
_ = letztes_Argument
Der Wert der internen Shell-Variablen _
ändert sich in das letzte Argument der ausgeführten Zeile. Das gilt NICHT für fast alle Shells (jsh, ash, yash, dash, lksh, mksh, ksh93, attsh und natürlich csh und tcsh) außer 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
Bitte beachten Sie, dass der Wert in $_
dem Wert nach der Erweiterung entspricht:
$ a="A New_Argument"
$ echo Something else to test: "$a"
Something else to test: A New_Argument
$ echo "$_"
A New_Argument
Deshalb, wenn Sie ausführen:
$ set -a myvar=99; set | grep 'myvar'
_=myvar=99
Sie erhalten eine Beschreibung der Shell-Variablen '$ _'. Das funktioniert auch:
$ set -a myvar=99; declare -p _
declare -- _="myvar=99"