Antworten:
$BASH
ist eine lokale Variable , die nur in der aktuellen (Bash-) Shell gültig ist.
Umgebungsvariablen wie $SHELL
sind systemweit gültig. Zeigt in einer aktuellen Bash-Shell $BASH
auf den Ausführungspfad von bash , während $SHELL
auf die als Standard definierte Shell zeigt (die möglicherweise denselben Wert hat).
Eine Erläuterung der Umgebungsvariablen finden Sie Umgebungsvariablen in Ubuntu - Hilfe.
Eine Umgebungsvariable ist ein global verfügbares, in einem Programm und ihm untergeordnetes Programm. Eine Shell-Variable ist nur in der aktuellen Shell verfügbar. Verwenden Sie export VARNAME
(ohne Dollar $
), um eine Shell-Variable als Umgebungsvariable verfügbar zu machen .
Beispiele zur Verdeutlichung:
$ SOME=VAR # define shell variable $SOME
$ echo $SOME
VAR
$ env | grep SOME # note: no output
$ export SOME # turn $SOME into an environment variable
$ env | grep SOME
SOME=VAR
Eine andere Möglichkeit, eine Umgebungsvariable zu definieren:
$ export ANOTHER=VALUE
$ echo $ANOTHER
VALUE
$ env | grep ANOTHER
ANOTHER=VALUE
export
legt nicht unbedingt eine Umgebungsvariable fest. stackoverflow.com/questions/7411455/…
export
legt eine Umgebungsvariable für untergeordnete Prozesse fest. Der von Ihnen verlinkte Beitrag widerspricht dieser Antwort nicht. Können Sie klären, warum Sie glauben, dass er falsch ist?
export
setze unbedingt eine Umgebungsvariable
Da ist ein Unterschied. Shell-Variablen und Umgebungsvariablen erklären es besser, als ich es kann, aber hier ist ein Auszug daraus:
Wenn eine Änderung an einer Shell-Variablen vorgenommen wird, muss diese explizit in die entsprechende Umgebungsvariable "exportiert" werden, damit die Änderung in gegabelten Unterprozessen angezeigt wird. Denken Sie daran, dass Shell-Variablen lokal für die Shell sind, in der sie definiert wurden.
Shell-Variable: Kurzfristig, Wird nur auf die aktuelle Instanz der Shell angewendet. Systemweit nicht anwendbar
Umgebungsvariable: Langzeitnutzung, systemweit gültig, global zulässig
Laut Konvention haben Shell-Variablen bei Envn ihren Namen als Kleinbuchstaben. Variablen werden in Großbuchstaben geschrieben
Um diese Frage zu beantworten, versuchen Sie zunächst, den Gültigkeitsbereich einer Variablen zu verstehen.
Wenn Sie eine neue Variable erstellen, wie SOME_ENV_VARIABLE="testing.txt"
sie sich in der SHELL scope
befindet, bedeutet dies, dass auf diese von der Instanz der Shell zugegriffen werden kann , bei der der Benutzer angemeldet ist. Wenn sich die Instanz ändert, öffnen Sie zum Beispiel ein neues Terminal oder Sie ändern die Shell (zum Beispiel Sie) wechseln zu csh
) Sie können nicht auf diese Variable zugreifen.
Wenn Sie diese Variable so exportieren, export SOME_ENV_VARIABLE
dass sie jetzt im Umgebungsbereich verfügbar ist, bedeutet dies, dass Sie in diesem Fall, wenn Sie die Shell ändern, weiterhin auf diese Variable zugreifen können. Versuchen wir mit folgendem Beispiel zu verstehen:
[vishrant@localhost]$ SOME_ENV_VARIABLE="testing.txt" #creating variable in bash shell
[vishrant@localhost]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost]$ export SOME_ENV_VARIABLE #variable now available with environment
[vishrant@localhost]$ env | grep SOME_ENV_VARIABLE
SOME_ENV_VARIABLE=testing.txt
[vishrant@localhost]$ csh #changing shell
[vishrant@localhost ~/shell_scripting]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost ~/shell_scripting]$ exit
exit #returned to parent shell
[vishrant@localhost]$ SOME_SHELL_VARIABLE="hello.txt"
[vishrant@localhost]$ csh
[vishrant@localhost ~/shell_scripting]$ echo $SOME_SHELL_VARIABLE
SOME_SHELL_VARIABLE: Undefined variable.
Analogie: Nehmen wir an, Sie haben ein Apartment mit zwei Schlafzimmern und teilen es mit einem anderen Mitbewohner. Der Gemeinschaftsraum ist für jeden zugänglich, aber nicht für Ihre Schlafzimmer. Umgebungsvariablen sind wie Gemeinschaftsräume, und Shell-Variablen sind wie Schlafzimmer. Wenn Sie etwas im Gemeinschaftsraum haben, kann jeder darauf zugreifen, aber wenn Sie es in Ihrem Schlafzimmer aufbewahren, ist dies nur möglich von Ihnen zugegriffen werden.
Denken Sie daran, dass Sie beim Öffnen eines neuen Terminals nicht auf eine der Variablen zugreifen können, da Sie diese Instanz ändern . Fügen Sie dazu Ihre Variablen entweder in .profile
oder hinzu .bashrc
(wenn Sie bash verwenden).