Was macht ein set
Befehl ohne Argumente?
Wie ich sehen kann, druckt es meine Umgebungsvariablen genau wie ein env
Befehl aus, jedoch in alphabetischer Reihenfolge. Außerdem werden verschiedene Informationen (Variablen? Funktionen?) Ausgegeben:
__git_printf_supports_v=yes
__grub_script_check_program=grub-script-check
...
quote ()
{
local quoted=${1//\'/\'\\\'\'};
printf "'%s'" "$quoted"
}
quote_readline ()
{
local quoted;
_quote_readline_by_ref "$1" ret;
printf %s "$ret"
}
Was ist es und wo kommt es her?
Ich kann keine Informationen zu set
Befehlen ohne Argumente finden. Eigentlich habe ich in meiner Linux-Distribution überhaupt keine man
Seite für set
.
Antworten:
set
ist eine integrierte Shell, die alle Shell-Variablen anzeigt, nicht nur die Umgebungsvariablen, sondern auch die Shell-Funktionen, die Sie am Ende der Liste sehen.Variablen werden mit einer Syntax angezeigt, mit der sie festgelegt werden können, wenn die Zeilen ausgeführt oder bezogen werden.
Von der
bash
Manualseite :Bei verschiedenen Schalen ist das Verhalten nicht unbedingt dasselbe. Zeigt beispielsweise
ksh
set
keine Shell-Funktionen an.quelle
ksh
die Funktionsdefinition nicht in der Shell-Variablen gespeichert wird.Weil
set
ausgegeben wurde undwhich set
nichts zurückgibt, von dem Sie wissen, dass es Teil der von Ihnen verwendeten Shell ist, wahrscheinlich bash.man bash erwähnt es oft, aber es ist einfacher in der Online-Dokumentation zu verlinken .
set hat die Rufspezifikation von:
Wenn Sie es also auf der Kommandozeile in man finden möchten, können Sie mit suchen
quelle
which set
hängt von deiner Schale ab. Zumindestzsh
werde ich es für dich melden. Sie können auch lesen diese für weitere Details.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"
wirdvar
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
undzsh
insh
,ksh
Emulation gedruckt werden nicht nur die Fehler, sondern auch gültige Optionen einstellen. Wenn Sieyash
die Einstellung der Optionen für die erste ungültige Option beenden,zsh
werden alle zugewiesen. Inyash
:f
undx
wird in präsentieren$-
, während:nur
f
anwesend in$-
. In beiden Fällenf
undx
wird$-
mitzsh
insh
undksh
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+
: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 deaktivierenx
undv
aktivieren (außerposh
) und weisen-
den Positionsparametern anschließend Folgendes zu:wird zuweisen
-f
zu$1
.set -
hat auch die Positionsparameter nicht aufgehoben. Schily osh benimmt sich auch so. Erbstück sh nicht eingestelltv
undx
Optionen.Die einzige POSIX-Shell-Ausnahme ist
yash
, die-
als ersten Positionsparameter behandelt :Schily tut gar nichts, wenn
-
in Argumenten vorhanden:quelle
set -- $unset
,,set - $unset
undset $unset
undset "$unset"
und erwähnen. Normalerweise sind es diese Unstimmigkeiten, die Menschen überhaupt erst in solche Schwierigkeiten bringen.$unset
.set $unset
genauso wieset
bei einer nicht gesetzten Variablen. Aberset "$unset"
es macht nichts, wennunset
es sich tatsächlich um eine nicht gesetzte Variable handelt. Aset - $unset
entfernt die-v
und-x
set-Optionen (in Bash).unset_var
. Und beachte auch, dassset "$unset"
eigentlich$1
auf leer gesetzt ist. Hier geht es um Shell-Erweiterung,set
also erwähne ich es nicht.posh
undyash
ist unterschiedlich, wenn es-
erscheint. Sie können meine aktualisierten lesen (und fühlen sich frei, es zu verbessern).Wenn Sie in einer Bash-Shell arbeiten, geben Sie Folgendes ein
help set
.Lesen Sie am Ende der gedruckten Hilfe Folgendes:
Ein no-Argument gibt also
set
alle Variablen aus, die der Shell bekannt sind.quelle
set -x; set
es hilfreich wäre