setè una shell incorporata , utilizzata per impostare e disinserire opzioni di shell e parametri posizionali.
Senza argomenti, setverranno stampate tutte le variabili shell (sia variabili d'ambiente che variabili nella sessione corrente) ordinate nella locale corrente .
Puoi anche leggere la documentazione di bash .
Ci sono alcuni avvertimenti.
set "$var"assegnerà varvalore a $1. Se $varinizia con -o +, il $varcontenuto è stato trattato come una sequenza di opzioni di shell. Se $varcontengono opzioni non valide, la maggior parte delle shell POSIX stamperà l'errore. yashe zshin sh, l' kshemulazione non solo stampa l'errore, ma imposta anche opzioni valide. Mentre yashinterrompi l'impostazione delle opzioni sulla prima opzione non valida, zshle assegnerai tutte. In yash:
var=-fxd; set "$var"
fe xpresenterà $-, mentre:
var=fdx; set "$var"
fpresente solo in $-. In entrambi i casi, fe xsi presenterà $-con zshin shed kshemulazione.
Per proteggerti da quella situazione, puoi passare --come primo argomento per impostare il parametro posizionale anche se inizia con -o +:
var=-fdx; set -- "$var"
assegnerà $vara $1, indipendentemente dal suo contenuto.
set -- senza ulteriori argomenti disinserirà tutti i parametri posizionali.
Se il primo argomento è -, il comportamento non è specificato. Tutte le shell POSIX note verranno disattivate xe le vopzioni (tranne posh) e assegneranno qualsiasi cosa dopo -ai parametri posizionali:
set -xv - -f
assegnerà -fa $1. set -inoltre non ha annullato i parametri posizionali. Anche Schily osh si comporta così. Heirloom sh non viene disattivato ve le xopzioni.
L'unica eccezione alla shell POSIX è yash, che considera -il primo parametro posizionale:
$ yash -c 'set -xv - -f; printf "%s\n" "$@"; printf "%s\n" "$-"'
+ printf %s\n - -f
-
-f
+ printf %s\n cvx
cvx
Schily sh non fa nulla se -presente negli argomenti:
$ schily-sh -c 'set -v - -f; printf "%s\n" "$@"; printf "%s\n" "$-"'
<blank line>
s
$ schily-sh -c 'set -v -- -f; printf "%s\n" "$@"; printf "%s\n" "$-"'
-f
vs