Quando esegui set -a var=99
, accadono tre cose distinte (legate alla tua domanda):
- Un'opzione set (
-a
) (indietro facendo set +a
) per esportare var.
- I parametri posizionali sono "impostati" su ciò che segue le opzioni (
$1
impostato su var=99
).
- La sottolineatura della variabile di shell
$_
è impostata sull'ultimo parametro (espanso).
impostare -a
L'esecuzione di set -a
contrassegna tutte le variabili successive (nuove o modificate) come esportate (in tutte le shell, ad eccezione di csh
alcune shell correlate).
$ set -a
$ myvariable=wer
$ env | grep myvariable
myvariable=wer
Per ripristinare da questa impostazione, basta cambiare -
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
impostare var = 99
Che dovrebbe effettivamente essere set -- var=99
per evitare l'interpretazione di un'opzione (e set ha molto) con valori che iniziano con un trattino ( -
).
Imposta l'elenco degli argomenti (l'elenco dei parametri posizionali) su quello dopo il --
. Questo è valido in tutte le shell ragionevoli (non in csh et al). Gli argomenti posizionali vengono stampati con "$ @" (o "$ *" simile, non uguale).
$ set -- a=1 b=2 c=3
$ echo "$@"
a=1 b=2 c=3
_ = Last_argument
E il valore della variabile della shell interna _
cambia all'ultimo argomento della riga eseguita. Questo NON è vero in quasi tutte le shell (jsh, ash, yash, dash, lksh, mksh, ksh93, attsh e ovviamente csh e tcsh) tranne 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
Si noti che il valore in $_
è il valore dopo l'espansione:
$ a="A New_Argument"
$ echo Something else to test: "$a"
Something else to test: A New_Argument
$ echo "$_"
A New_Argument
Ecco perché quando esegui:
$ set -a myvar=99; set | grep 'myvar'
_=myvar=99
Si ottiene una descrizione della variabile di shell '$ _'. Questo funziona anche:
$ set -a myvar=99; declare -p _
declare -- _="myvar=99"