Wo werden Shell-Variablen gespeichert?

Wo werden Shell-Variablen gespeichert?

Wenn ich beispielsweise eineParametererweiterung:

$ b=1
$ echo $b
1

Wo wird es bintern gespeichert? Ich habe es überprüft und es ist keine Umgebungsvariable, da es nicht aufgelistet ist printenv. Ich schreibe meine eigene Shell, um Unix zu lernen, und ich habe eine Hashtabelle verwendet, um Variablen als „Symbol-Lookup-Tabelle“ zu speichern und abzurufen. Ist diese Methode gut oder würden Sie mir eine andere Methode vorschlagen?

Antwort1

Die Shell, die ausgeführt wird, wenn Sie sich anmelden, um Ihre Befehle zu lesen und auszuführen, behält alle Variablen. Wenn Sie eine zweite Shell ausführen, verfügt diese über eine eigene Variablensammlung. Sie können den setBefehl ausführen, um eine Liste der Variablen anzuzeigen. Der setBefehl wird innerhalb der Shell ausgeführt, anstatt einen neuen Prozess zu starten.

Umgebungsvariablen werden entweder an einer separaten Stelle gespeichert oder als solche gekennzeichnet (wenn dies wichtig ist, lesen Sie den Shell-Quellcode), sodass sie an die von der Shell ausgeführten Programme weitergegeben werden.

Die Verwendung von zwei Hashtabellen erscheint mir sinnvoll.

Antwort2

Es ist nur eine Variable für die Dauer der Programmausführung. Eine andere Möglichkeit, darüber nachzudenken, besteht darin, Ihr Programm wie folgt umzuschreiben.

#!/bin/bash
b=1
echo $b
exit

Stellen Sie sich nun vor, Sie tun dies in einem Terminal und beenden dann diese Terminalsitzung. Wenn Sie eine weitere Terminalsitzung öffnen, wird Ihnen nicht angezeigtirgendetwasbezüglich dieser b=1Aufgabe in der vorherigen Sitzung.

Dies wird als „lokale Variable“ bezeichnet, im Gegensatz zu einer „globalen Variable“. Sie werden, wie viele andere Funktionen auch, mit angezeigt set.

Wenn Sie also die Aufgabe sehen möchten,

set |grep '^b='

b=1

Bitte beachten SieDas Linux Documentation Projectfür mehr Informationen.

Antwort3

Shellvariablen werden im Speicher der laufenden Shell gespeichert. Verwenden Sie eine beliebige Datenstruktur, mit der Sie ein Element anhand seines Namens leicht nachschlagen können. Eine Hash-Tabelle ist eine gute Wahl.

Der Unterschied zwischen Shell-Variablen und Umgebungsvariablen besteht darin, dass Umgebungsvariablen in der Umgebung von Unterprozessen platziert werden. Alle Umgebungsvariablen sind Shell-Variablen. Die natürliche Art, sie zu speichern, besteht darin, eine Hash-Tabelle zu erstellen, die Variablennamen nicht einem Wert, sondern einer Struktur zuordnet, die einen Wert und einige Flags (exportiert, schreibgeschützt, …) enthält.

verwandte Informationen