setist eine eingebaute Shell , die für festgelegte und nicht festgelegte Shell-Optionen und Positionsparameter verwendet wird.
Ohne Argumente setwerden alle Shell-Variablen (sowohl Umgebungsvariablen als auch Variablen in der aktuellen Sitzung) in der aktuellen Ländereinstellung sortiert ausgegeben .
Sie können auch die Bash-Dokumentation lesen .
Es gibt ein paar Einschränkungen.
set "$var"wird varWert zuweisen $1. Wenn Sie $varmit -oder beginnen +, wurde der $varInhalt als Folge von Shell-Optionen behandelt. Wenn $varungültige Optionen enthalten sind, wird der Fehler von den meisten POSIX-Shells gedruckt. yashund zshin sh, kshEmulation gedruckt werden nicht nur die Fehler, sondern auch gültige Optionen einstellen. Wenn Sie yashdie Einstellung der Optionen für die erste ungültige Option beenden, zshwerden alle zugewiesen. In yash:
var=-fxd; set "$var"
fund xwird in präsentieren $-, während:
var=fdx; set "$var"
nur fanwesend in $-. In beiden Fällen fund xwird $-mit zshin shund kshEmulation präsentieren.
Um Sie vor dieser Situation zu schützen, können Sie --als erstes Argument angeben, dass der Positionsparameter gesetzt werden soll, auch wenn er mit -oder beginnt +:
var=-fdx; set -- "$var"
wird vergeben $varan $1, unabhängig von dessen Inhalt.
set -- Ohne weitere Argumente werden alle Positionsparameter zurückgesetzt.
Wenn das erste Argument lautet -, ist das Verhalten nicht angegeben. Alle bekannten POSIX-Shells deaktivieren xund vaktivieren (außer posh) und weisen -den Positionsparametern anschließend Folgendes zu:
set -xv - -f
wird zuweisen -fzu $1. set -hat auch die Positionsparameter nicht aufgehoben. Schily osh benimmt sich auch so. Erbstück sh nicht eingestellt vund xOptionen.
Die einzige POSIX-Shell-Ausnahme ist yash, die -als ersten Positionsparameter behandelt :
$ yash -c 'set -xv - -f; printf "%s\n" "$@"; printf "%s\n" "$-"'
+ printf %s\n - -f
-
-f
+ printf %s\n cvx
cvx
Schily tut gar nichts, wenn -in Argumenten vorhanden:
$ 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