Wie kann ich alle Shell-Variablen auflisten?

18

Lesen Sie zu dieser Frage: Wie kann ich in zsh alle Umgebungsvariablen auflisten? Ich habe mich gefragt, wie ich alle Shell-Variablen auflisten kann.

Gilt die Unterscheidung zwischen Shell- Variablen und Umgebungsvariablen auch für andere Shells als zsh?

Ich interessiere mich hauptsächlich für Bash und Zsh, aber es wäre toll zu wissen, wie man das in anderen Mainstream-Shells macht.

Josh
quelle

Antworten:

21

Listen Sie alle Shell-Variablen auf

bash: verwenden set -o posix ; set. Mit den POSIX-Optionen wird vermieden, dass zu viele Informationen wie Funktionsdefinitionen ausgegeben werden. declare -pfunktioniert auch.

zsh : verwenden typeset

Shell-Variablen und Umgebungsvariablen

Eine Umgebungsvariable steht exec()untergeordneten Prozessen zur Verfügung (als Kopie. Wenn der übergeordnete Prozess die Variable ändert, wird die untergeordnete Umgebung nicht aktualisiert). Eine Nicht-Umgebungsvariable ist nur für die aktuell ausgeführten Shell- und fork()-ed-Subshells verfügbar. Diese Unterscheidung ist in allen Schalen vorhanden.

(dank Kommentaren ausgefüllt)

Uriel
quelle
declare -p
Costas
Die Frage hat auch eine Antwort hier: stackoverflow.com/questions/1305237/…
Uriel
1
set -o posixexistiert nicht in zsh; setgibt keine Funktionsdefinitionen aus.
Vinc17
1
set -o posixist ein Syntaxfehler in den meisten Shells.
mikeserv
3
Shell-Variablen sind auch in untergeordneten Prozessen verfügbar. Der Unterschied ergibt sich, wenn der untergeordnete Prozess ein neues Programm ausführt: Umgebungsvariablen werden übergeben exec, Shell-Variablen nicht.
Barmar
7

Es gibt viele Alternativen:

printenv

Gibt die Werte der angegebenen Umgebung VARIABLE (s) aus. Wenn keine VARIABLE angegeben ist, drucken Sie für alle Namen- und Wertepaare.

env

Führen Sie ein Programm in einer geänderten Umgebung aus

Export

Legen Sie eine Umgebungsvariable fest. Markieren Sie jeden Namen, der an untergeordnete Prozesse in der Umgebung übergeben werden soll.

-p Ausgabe in einer Form anzeigen, die als Eingabe wiederverwendet werden kann.

Wenn keine Namen angegeben wurden oder die Option -p angegeben wurde, wird eine Liste der exportierten Namen angezeigt.

einstellen

ist auch nützlich, um Shell-Variablen abzurufen.

Wenn Sie zusätzliche Informationen benötigen (Ganzzahl, exportiert), sollten Sie stattdessen verwenden

setzen

Der Export hat den Vorteil, dass seine Ausgabe sofort auf die Shell zurückgelesen werden kann.

Schließlich gibt es

compgen -v

Zeigen Sie mögliche Abschlüsse abhängig von den Optionen an.

Hier werden alle Variablen, die Shell und die Umgebung angezeigt, ohne deren Wert oder zusätzliche Informationen. Sie müssen $ VARIABLE_NAME als Echo angeben , um den Variablenwert zu ermitteln. Aber zumindest ist die Liste vollständig. Es gehört zu bash , nicht zu zsh .

MariusMatutiae
quelle
1
exporthat setzumindest keinen Vorteil , wenn es um das Zitieren eines Shell-Wiedereintritts geht. Und printenvund envsind überhaupt nicht über Shell - Variablen, obwohl diese nicht fallen oft zusammen mit Umgebungsvariablen.
mikeserv
3

Mit zshkönnen Sie verwenden typeset, was mehr Informationen liefert als setzB den Typ der Variablen. Sie können die Ausgabe weiterhin mit grepoder filtern sed, je nachdem, was Sie möchten. Umgebungsvariablen werden wie exportedin der Ausgabe markiert .

vinc17
quelle