Geben Sie Folgendes in Bash ein:
env | grep USER
und
set | grep USER
gibt beide Male den gleichen Benutzernamen.
Woher weiß ich beispielsweise bei der Eingabe, echo $USER
ob die Shell oder die Umgebungsvariable angezeigt wurde?
Geben Sie Folgendes in Bash ein:
env | grep USER
und
set | grep USER
gibt beide Male den gleichen Benutzernamen.
Woher weiß ich beispielsweise bei der Eingabe, echo $USER
ob die Shell oder die Umgebungsvariable angezeigt wurde?
Für POSIX-kompatible Shells (einschließlich Bash) heißt es im Standard:
2.5.3 Shell-Variablen
Variablen müssen aus der Umgebung initialisiert werden [...] Wenn eine Variable aus der Umgebung initialisiert wird, muss sie sofort für den Export markiert werden. Siehe das eingebaute Export-Special. Neue Variablen können mit Variablenzuweisungen definiert und initialisiert werden, [usw.]
Und über export
:
export name[=word]...
Die Shell gibt den Variablen, die den angegebenen Namen entsprechen, das Exportattribut, wodurch sie sich in der Umgebung von anschließend ausgeführten Befehlen befinden.
Aus Sicht der Shell gibt es also nur Variablen. Einige von ihnen stammen möglicherweise aus der Umgebung, als die Shell gestartet wurde, und einige von ihnen wurden möglicherweise in die Umgebung der Prozesse exportiert, die die Shell startet.
(Die "Umgebung" ist wirklich nur eine Reihe von Zeichenfolgen, die beim Starten an den Prozess übergeben werden. Wenn der Prozess ausgeführt wird, kann er damit tun, was er will, ihn verwenden, ignorieren, überschreiben. Und was ein Prozess weitergibt Das Starten anderer Prozesse kann noch eine andere Sache sein, obwohl es natürlich üblich ist, alle Umgebungsvariablen einfach erneut weiterzugeben.)
Wenn Sie eine Nicht-POSIX-Shell verwenden, z. B. csh
andere Dinge:
$ csh
% echo $foo
foo: Undefined variable.
% setenv foo bar
% echo $foo
bar
% set foo=asdf
% echo $foo
asdf
% env |grep foo
foo=bar
% exit
Dies sind ein und dieselbe Variable. In der Shell haben Umgebungsvariablen und Shell-Variablen im Gegensatz zu den meisten anderen Programmiersprachen denselben Namensraum. In der Shell ist eine Umgebungsvariable eine Shell-Variable, mit der exportiert wurde
export
.Siehe zum Beispiel meine Antwort auf Ihre vorherige Frage " Was ist der Unterschied in der Verwendung zwischen Shell-Variablen und Umgebungsvariablen? "
quelle
Die Shell-Variable kann nur für die aktuelle Shell verwendet werden. Sie kann nicht systemweit verwendet werden. Am anderen Ende kann die Umgebungsvariable systemweit verwendet werden. Konventionell werden Shell-Variablen als Kleinbuchstaben geschrieben, während Umgebungsvariablen als Großbuchstaben geschrieben werden. Sie können eine Shell-Variable als Umgebungsvariable verwenden, Sie müssen sie nur exportieren.
quelle