Wie kann ich in einem Linux-Bash-Terminal eine Liste aller aktuell definierten Umgebungsvariablen anzeigen?

Wie kann ich in einem Linux-Bash-Terminal eine Liste aller aktuell definierten Umgebungsvariablen anzeigen?

In einem Linux-Bash-Terminal wurden häufig viele Umgebungsvariablen festgelegt, wie $PATHund $HOME.

Ist es möglich, alle festgelegten Umgebungsvariablen anzuzeigen? Wie?

Antwort1

Kurz zusammengefasst:verwenden(set -o posix ; set)


Laut dem Bash-Handbuch können Sieverwenden Sie den setintegrierten Befehl, um alle Umgebungsvariablen anzuzeigendie gesetzt wurden. Der setBefehl zeigt auch die Definitionen aller Funktionen an. Wenn Sie nur die Variablen und nicht die Funktionen sehen möchten, können Sie den POSIX-Modus einschalten, bevor Sie den Befehl set ausführen. Am einfachsten geht das mit set -o posix, aber dadurch bleibt der POSIX-Modus eingeschaltet, bis Sie ihn mit ausschalten set +o posix.

Daher zeigt der folgende Befehl alle definierten Umgebungsvariablen durch Verwendung einer Subshell an, ohne die POSIX-Konformität in Ihrer aktuellen Shell zu beeinträchtigen.

(set -o posix ; set)

@RedGrittyBrick und @iglvzx haben vorgeschlagen, den envBefehl zu verwenden. Dieser Befehl liefert jedoch keine vollständige Liste der Umgebungsvariablen. envzeigt nur die Variablen an, die für den Export markiert wurden. Vergleichen Sie die Ausgabe von env | sortund export -pund Sie werden sehen, was ich meine. Sie können ausführen, comm -23 <(set -o posix; set) <(env|sort)wenn Sie sehen möchten, welche Umgebungsvariablen nicht exportiert werden.

Der Grund für die Diskrepanz ist, dass es envsich um eine separate ausführbare Datei handelt und nicht um seteinen in die Shell integrierten Befehl. Laut dem Bash-Handbuch:Wenn ein Befehl ausgeführt wird, der kein in die Shell integrierter Befehl oder keine integrierte Funktion ist, werden nur Umgebungsvariablen empfangen, die in Bash für den Export markiert wurden.. Es gibt viele Variablen, die nicht exportiert werden. Wenn Sie also alle Variablen sehen möchten, die Ihre Shell definiert hat, müssen Sie den setBefehl wie im Handbuch angegeben verwenden.

Mit den folgenden Befehlen können Sie dieses Verhalten ganz einfach selbst testen.

MY_TEST_VARIABLE="This is my test variable."
set | grep MY_TEST_VARIABLE
env | grep MY_TEST_VARIABLE

Sie werden sehen, dass seteine Ausgabe erfolgt, während envdies nicht der Fall ist.

Antwort2

Der envBefehl ohne Argumente gibt eine Liste der "exportierten" Umgebungsvariablen und ihrer Werte aus. Diese Variablen werden für Unterprozesse sichtbar gemacht - viele andere Umgebungsvariablen werden dabei nicht angezeigt und nur innerhalb der laufenden Shell verwendet, z. B. für die Konfiguration.

Antwort3

compgen -v

druckt Shell-Variablen (aber nicht die Werte).

compgen -e

druckt exportierte Variablen, d. h. diejenigen, die von Prozessen geerbt werden, die diese Shell startet (aber nicht deren Werte).

Unterschied zwischen Shell- und exportierten Variablen:https://unix.stackexchange.com/questions/3507/unterschied-zwischen-umgebungsvariablen-und-exportierten-umgebungsvariablen-in-b?rq=1

Antwort4

Wenn ich einige der vorherigen Antworten kombiniere, finde ich Folgendes nützlich:

compgen -v  | sort | while read var; do [ -z "${!var}" ] || echo $var=${!var} ; done
  • compgen -v: Alle Variablennamen drucken, entweder lokal oder exportiert.
  • sort: Alphabetischer Reihenfolge.
  • ${!var}: Ruft den Wert von $var ab (Variablendedirektion).
  • -zBedingung: Überprüfen Sie, ob der Wert null ist, andernfalls drucken Sie „Variable=Wert“.

Hinweis: printenvist auch großartig, aber es wird nur eine Liste der Umgebungsvariablen angezeigt, die exportiert wurden, keine lokalen/Bash-Variablen.

verwandte Informationen