set
ist eine eingebaute Shell , die für festgelegte und nicht festgelegte Shell-Optionen und Positionsparameter verwendet wird.
Ohne Argumente set
werden 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 var
Wert zuweisen $1
. Wenn Sie $var
mit -
oder beginnen +
, wurde der $var
Inhalt als Folge von Shell-Optionen behandelt. Wenn $var
ungültige Optionen enthalten sind, wird der Fehler von den meisten POSIX-Shells gedruckt. yash
und zsh
in sh
, ksh
Emulation gedruckt werden nicht nur die Fehler, sondern auch gültige Optionen einstellen. Wenn Sie yash
die Einstellung der Optionen für die erste ungültige Option beenden, zsh
werden alle zugewiesen. In yash
:
var=-fxd; set "$var"
f
und x
wird in präsentieren $-
, während:
var=fdx; set "$var"
nur f
anwesend in $-
. In beiden Fällen f
und x
wird $-
mit zsh
in sh
und ksh
Emulation 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 $var
an $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 x
und v
aktivieren (außer posh
) und weisen -
den Positionsparametern anschließend Folgendes zu:
set -xv - -f
wird zuweisen -f
zu $1
. set -
hat auch die Positionsparameter nicht aufgehoben. Schily osh benimmt sich auch so. Erbstück sh nicht eingestellt v
und x
Optionen.
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