Shell-Variablen
Shell-Variablen sind Variablen, deren Gültigkeitsbereich sich in der aktuellen Shell-Sitzung befindet, beispielsweise in einer interaktiven Shell-Sitzung oder einem Skript.
Sie können eine Shell-Variable erstellen, indem Sie einem nicht verwendeten Namen einen Wert zuweisen:
var="hello"
Die Verwendung von Shell-Variablen dient dazu, die Daten in der aktuellen Sitzung zu verfolgen. Shell-Variablen haben normalerweise Namen mit Kleinbuchstaben.
Umgebungsvariablen
Eine Umgebungsvariable ist eine Shell-Variable, die exportiert wurde. Dies bedeutet, dass es als Variable nicht nur in der Shell-Sitzung angezeigt wird, die es erstellt hat, sondern auch für alle Prozesse (nicht nur Shells), die von dieser Sitzung aus gestartet werden.
VAR="hello" # shell variable created
export VAR # variable now part of the environment
oder
export VAR="hello"
Sobald eine Shell-Variable exportiert wurde, bleibt sie exportiert, bis sie nicht mehr gesetzt ist oder bis ihre "export-Eigenschaft" entfernt wird (mit export -n
in bash
), sodass sie normalerweise nicht erneut exportiert werden muss. Wenn Sie eine Variable mit deaktivieren, wird sie gelöscht unset
(unabhängig davon, ob es sich um eine Umgebungsvariable handelt oder nicht).
Arrays und assoziative Hashes in bash
und andere Shells können möglicherweise nicht als Umgebungsvariablen exportiert werden. Umgebungsvariablen müssen einfache Variablen sein, deren Werte Zeichenfolgen sind und deren Namen häufig aus Großbuchstaben bestehen.
Die Verwendung von Umgebungsvariablen dient dazu, die Daten in der aktuellen Shell-Sitzung zu verfolgen, aber auch jedem gestarteten Prozess zu ermöglichen, an diesen Daten teilzunehmen. Der typische Fall hierfür ist die PATH
Umgebungsvariable, die in der Shell festgelegt und später von jedem Programm verwendet werden kann, das Programme starten möchte, ohne einen vollständigen Pfad zu ihnen anzugeben.
Die Sammlung von Umgebungsvariablen in einem Prozess wird häufig als "die Umgebung des Prozesses" bezeichnet. Jeder Prozess hat eine eigene Umgebung.
Umgebungsvariablen können nur "weitergeleitet" werden, dh ein untergeordneter Prozess kann die Umgebungsvariablen in seinem übergeordneten Prozess niemals ändern, und abgesehen vom Einrichten der Umgebung für einen untergeordneten Prozess beim Starten ändert ein übergeordneter Prozess möglicherweise nicht die vorhandene Umgebung von a untergeordneter Prozess.
Umgebungsvariablen können mit env
(ohne Argumente) aufgelistet werden . Ansonsten sehen sie in einer Shell-Sitzung genauso aus wie nicht exportierte Shell-Variablen. Dies ist etwas speziell für die Shell, da die meisten anderen Programmiersprachen normalerweise keine "normalen" Variablen mit Umgebungsvariablen vermischen (siehe unten).
env
kann auch verwendet werden, um die Werte einer oder mehrerer Umgebungsvariablen in der Umgebung eines Prozesses festzulegen, ohne sie in der aktuellen Sitzung festzulegen:
env CC=clang CXX=clang++ make
Dies beginnt make
damit, dass die Umgebungsvariable CC
auf den Wert gesetzt clang
und auf CXX
gesetzt wird clang++
.
Es kann auch verwendet werden, um die Umgebung für einen Prozess zu löschen :
env -i bash
Dies beginnt bash
aber nicht die aktuelle Umgebung auf den neuen übertragen bash
Prozess (es wird nach wie vor hat Umgebungsvariablen , wie sie neue aus seiner Schale Initialisierungsskripts erstellt).
Beispiel für den Unterschied
$ var="hello" # create shell variable "var"
$ bash # start _new_ bash session
$ echo "$var" # no output
$ exit # back to original shell session
$ echo "$var" # "hello" is outputted
$ unset var # remove variable
$ export VAR="hello" # create environment variable "VAR"
$ bash
$ echo "$VAR" # "hello" is outputted since it's exported
$ exit # back to original shell session
$ unset VAR # remove variable
$ ( export VAR="hello"; echo "$VAR" ) # set env. var "VAR" to "hello" in subshell and echo it
$ echo "$VAR" # no output since a subshell has its own environment
Andere Sprachen
In den meisten Programmiersprachen gibt es Bibliotheksfunktionen, mit denen Umgebungsvariablen abgerufen und festgelegt werden können. Da Umgebungsvariablen als einfache Schlüssel-Wert-Beziehung gespeichert werden, handelt es sich normalerweise nicht um "Variablen" der Sprache. Ein Programm kann den Wert (der immer eine Zeichenfolge ist) abrufen, der einem Schlüssel (dem Namen der Umgebungsvariablen) entspricht, muss ihn dann jedoch in eine Ganzzahl oder in den Datentyp konvertieren, den die Sprache für den Wert erwartet.
In C, kann Umgebungsvariablen zugegriffen mit getenv()
, setenv()
, putenv()
und unsetenv()
. Mit diesen Routinen erstellte Variablen werden von jedem Prozess, den das C-Programm startet, auf dieselbe Weise vererbt.
Andere Sprachen können spezielle Datenstrukturen haben, um dasselbe zu erreichen, wie der %ENV
Hash in Perl oder das ENVIRON
assoziative Array in den meisten Implementierungen von awk
.