Shell-Variablen vs. Umgebungsvariablen
MY_HOME="/home/my_user"
Legt die aufgerufene Shell-Variable festMY_HOME
. Shells sind Programmiersprachen und haben Variablen (auch Parameter genannt). Nach dieser Zuordnung können Sie den Wert der Variablen verwenden, z echo "$MY_HOME"
. B. mit .
Shell-Variablen sind ein internes Shell-Konzept. Wenn diese Shell-Instanz beendet wird, MY_HOME
wird vergessen. Was jedes Programm kennt und an seine Kinder überträgt, sind Umgebungsvariablen .
Innerhalb der Shell arbeiten Umgebungsvariablen und Shellvariablen auf sehr ähnliche Weise. Tatsächlich werden alle Umgebungsvariablen, die die Shell von ihrem übergeordneten Element übernimmt, zu Shellvariablen. Umgekehrt wird eine in einem Shell-Skript definierte Shell-Variable zu einer Umgebungsvariablen, wenn Sie sie exportieren .
export MY_HOME="/home/my_user"
Weitere Details können Sie bei der ersten Lesung überspringen
Der Grund, warum Shell-Variablen nicht automatisch zu Umgebungsvariablen werden, ist zum einen, dass ein Skript versehentlich einen Variablennamen verwendet, der für ein von ihm gestartetes Programm von Bedeutung ist, und zum anderen, dass es sich nur um historische Variablen handelt.
Einige sehr alte Shells müssen export
jedes Mal verwendet werden, wenn Sie einen Variablennamen ändern. Alle modernen Shells protokollieren jedoch die Zuweisungen für Umgebungsvariablen, sodass das folgende Snippet wiedergegeben wird bar
:
myvar=foo
export myvar
myvar=bar
env | grep '^myvar='
Einige sehr alte Shells erforderten separate Befehle für myvar=foo
und export myvar
, aber alle modernen Shells verstehen export myvar=foo
.
Sie können ausführen set -a
, um alle Shell-Variablenzuweisungen zu veranlassen, die Variable automatisch zu exportieren. Dies myvar=foo
entspricht dem Vorgang, export myvar=foo
wenn Sie set -a
diese Shell zuerst ausgeführt haben.
Beim Zitieren
Das Zitieren ist meistens orthogonal. Wenn der Wert, den Sie der Variablen zuweisen, keine Sonderzeichen für die Shell enthält, benötigen Sie keine Anführungszeichen. Wenn es Sonderzeichen gibt, müssen Sie diese mit einfachen oder doppelten Anführungszeichen oder Backslashes oder einer Kombination davon schützen. Dies gilt sowohl für die einfache myvar=value
Syntax als auch für das export
Dienstprogramm.
Es gibt einen Unterschied zwischen der Zuweisungssyntax und der export
Syntax. Die Shell erweitert die Ergebnisse von Variablensubstitutionen $foo
weiter und führt Feld- (Wort-) Aufteilung und Pfadnamenerweiterung (Globbing) durch . Das heißt, wenn der Wert von myvar
ist hello *
, wird echo $myvar
gedruckt, hello
gefolgt von einem einzelnen Leerzeichen, gefolgt von der Liste der Dateien im aktuellen Verzeichnis. Dies ist fast nie wünschenswert, damit das allgemeine Prinzip immer in doppelte Anführungszeichen Variablenersetzungen verwenden (es sei denn , Sie wissen , dass Sie Expansion oder Feldaufspaltung pathname muss): echo "$myvar"
. Im Falle einer einfachen Zuweisung wird othervar=$myvar
der Wert von myvar
to tatsächlich zuverlässig kopiertothervar
, weil Globbing und Wortteilung in Zuweisungen unterbunden sind (weil sie mehrere Wörter erzeugen, aber ein einzelnes Wort erwartet wird). Diese Ausnahmeregelung gilt jedoch nicht export
. Wenn Sie sich also an eine einfache Regel erinnern möchten, setzen Sie Variablenersetzungen immer in doppelte Anführungszeichen.