Ich denke, Sie kommen aus einem Windows-Hintergrund. Also werde ich sie kontrastieren (ich bin auch ein bisschen neu in Linux). Ich fand die Antwort des Benutzers auf meinen Kommentar nützlich, um Dinge herauszufinden.
In Windows kann eine Variable permanent sein oder nicht. Der Begriff Umgebungsvariable umfasst eine Variable, die in der cmd-Shell mit dem Befehl SET festgelegt wurde, sowie wenn die Variable in der Windows-GUI festgelegt und somit in der Registrierung festgelegt wurde und in neuen cmd-Fenstern angezeigt werden kann. zB Dokumentation für den Befehl set in Windows https://technet.microsoft.com/en-us/library/bb490998.aspx "Zeigt Umgebungsvariablen an, legt sie fest oder entfernt sie. Wird ohne Parameter verwendet, zeigt set die aktuellen Umgebungseinstellungen an." Unter Linux zeigt set keine Umgebungsvariablen an, sondern Shell-Variablen, die nicht als Umgebungsvariablen bezeichnet werden. Außerdem verwendet Linux set nicht zum Festlegen von Variablen (abgesehen von Positionsparametern und Shell-Optionen, die ich am Ende als Hinweis erläutere), sondern nur zum Anzeigen und selbst dann nur zum Anzeigen von Shell-Variablen. Windows verwendet set zum Einstellen und Anzeigen, z. B. set a = 5, Linux nicht.
Unter Linux können Sie vermutlich ein Skript erstellen, das beim Booten Variablen festlegt, z. B. /etc/profile
oder /etc/.bashrc
ansonsten sind sie nicht permanent. Sie sind im RAM gespeichert.
Unter Linux wird zwischen Shell-Variablen und Umgebungsvariablen unterschieden. Unter Linux befinden sich Shell-Variablen nur in der aktuellen Shell, und Umgebungsvariablen befinden sich in dieser Shell und allen untergeordneten Shells.
Sie können Shell-Variablen mit dem set
Befehl anzeigen (beachten Sie jedoch, dass Variablen im Gegensatz zu Windows nicht mit dem Befehl set unter Linux festgelegt werden).
set -o posix; set
(Wenn Sie dieses Set -o zuerst einmal ausführen, wird nicht zu viel unnötiges Material angezeigt.) So set
zeigt Shell - Variablen.
Sie können Umgebungsvariablen mit dem env
Befehl anzeigen
Shell-Variablen werden zB mit just gesetzt a = 5
Umgebungsvariablen werden mit export festgelegt, export legt auch die Shell-Variable fest
Hier sehen Sie die Shell-Variable zzz, die mit zzz = 5 gesetzt ist, und sie wird beim Ausführen angezeigt set
, jedoch nicht als Umgebungsvariable.
Hier sehen wir yyy mit export gesetzt, also ist es eine Umgebungsvariable. Und siehe, es wird sowohl unter Shell-Variablen als auch unter Umgebungsvariablen angezeigt
$ zzz=5
$ set | grep zzz
zzz=5
$ env | grep zzz
$ export yyy=5
$ set | grep yyy
yyy=5
$ env | grep yyy
yyy=5
$
andere nützliche Themen
/unix/176001/how-can-i-list-all-shell-variables
/ubuntu/26318/environment-variable-vs-shell-variable-whats-the-difference
Hinweis: Ein Punkt, der ein wenig näher ausgeführt wird und etwas korrigiert, was ich geschrieben habe, ist, dass in Linux Bash 'set' verwendet werden kann, um "Positionsparameter" und "Shell-Optionen / Attribute" festzulegen, und technisch beides Dies sind Variablen, obwohl die Manpages sie möglicherweise nicht als solche beschreiben. Wie bereits erwähnt, setzt set jedoch keine Shell-Variablen oder Umgebungsvariablen. Wenn Sie dies tun set asdf
, wird $ 1 auf asdf gesetzt, und wenn Sie dies tun echo $1
, sehen Sie asdf. Wenn Sie tunset a=5
Die Variable a wird nicht gleich 5 gesetzt. Der Positionsparameter $ 1 wird gleich der Zeichenfolge "a = 5" gesetzt. Wenn Sie also jemals gesehen haben, dass unter Linux a = 5 gesetzt ist, ist dies wahrscheinlich ein Fehler, es sei denn, jemand wollte diese Zeichenfolge a = 5 in $ 1. Das andere, was Linux einstellen kann, sind Shell-Optionen / Attribute. Wenn Sie -o setzen, sehen Sie eine Liste von ihnen. Und Sie können zum Beispiel set -o verbose
aus, um ausführlich zu schalten (übrigens ist die Standardeinstellung aus, aber das macht keinen Unterschied). Oder Sie können tun set +o verbose
, um ausführlich zu deaktivieren. Windows hat keine solche Verwendung für seinen Befehl set.