Jemand hat mir gesagt, dass:
BASH ist keine Umgebungsvariable, sondern eine Shell-Variable
Was ist der Unterschied?
bash
command-line
environment-variables
Tom Brito
quelle
quelle
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.
quelle
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:
Eine andere Möglichkeit, eine Umgebungsvariable zu definieren:
quelle
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 UmgebungsvariableDa ist ein Unterschied. Shell-Variablen und Umgebungsvariablen erklären es besser, als ich es kann, aber hier ist ein Auszug daraus:
quelle
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
quelle
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 derSHELL 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 zucsh
) 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: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).quelle