Was ist der Unterschied zwischen set, env, declareund exportwenn eine Variable in einem Linux - Shell, wie Einstellung bash?
Was ist der Unterschied zwischen set, env, declareund exportwenn eine Variable in einem Linux - Shell, wie Einstellung bash?
Antworten:
Es scheint, dass set und declare etwas unterschiedlich sind, wobei set mächtiger ist.
Siehe "declare" unter https://www.gnu.org/software/bash/manual/bash.html#Bash-Builtins declare: "Deklariere Variablen und gib ihnen Attribute. Wenn keine Namen angegeben sind, zeige die Werte der Variablen an stattdessen.
Set "set" unter https://www.gnu.org/software/bash/manual/bash.html#The-Set-Builtin * set: "Dieses eingebaute Programm ist so kompliziert, dass es einen eigenen Abschnitt verdient Ändern Sie die Werte der Shell-Optionen und legen Sie die Positionsparameter fest oder zeigen Sie die Namen und Werte der Shell-Variablen an. "
ENV ist eine Umgebungsvariable in Bash: https://www.gnu.org/software/bash/manual/bash.html#Bash-Variables env ist ein Linux-Befehl. Ich denke, dies ist eine gute Referenz: /unix/103467/what-is-env-command-doing
Ich dachte, dies sei eine gute Erklärung für den Export: http://www.unix.com/302531838-post2.html
Außerdem: https://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins * export (von Bourne): "Markieren Sie jeden Namen, der an untergeordnete Prozesse in der Umgebung übergeben werden soll."
Code von obiger URL ausleihen:
root@linux ~# x=5 <= here variable is set without export command
root@linux ~# echo $x
5
root@linux ~# bash <= subshell creation
root@linux ~# echo $x <= subshell doesnt know $x variable value
root@linux ~# exit <= exit from subshell
exit
root@linux ~# echo $x <= parent shell still knows $x variable
5
root@linux ~# export x=5 <= specify $x variable value using export command
root@linux ~# echo $x <= parent shell doesn't see any difference from the first declaration
5
root@linux ~# bash <= create subshell again
root@linux ~# echo $x <= now the subshell knows $x variable value
5
root@linux ~#
declareund setund env? Export vs deklarieren?
Erstens müssen Sie das verstehen environment variablesund shell variablessind nicht dasselbe.
Dann sollten Sie wissen, dass Shells Attribute haben , die bestimmen, wie es funktioniert. Diese Attribute sind keine Umgebungs- oder Shell-Variablen.
Nun zur Beantwortung Ihrer Frage.
env: Zeigt ohne Optionen die aktuellen Umgebungsvariablen mit ihren Werten an. Kann jedoch verwendet werden, um Umgebungsvariablen für einen einzelnen Befehl mit dem -iFlag festzulegenset: ohne Optionen werden der Name und der Wert jeder Shell-Variablen angezeigt * ~, man setwenn sie in rhel ausgeführt werden; kann auch verwendet werden, um das Shell-Attribut festzulegen . Dieser Befehl setzt NICHT die Umgebungsvariable oder die Shell-Variable .declare: ohne Optionen, dasselbe wie env; kann auch verwendet werden, um die Shell-Variable zu setzenexport: Erstellt Umgebungsvariablen für Shell- VariablenZusamenfassend:
set setzt weder Shell noch Umgebungsvariablenenv kann Umgebungsvariablen für einen einzelnen Befehl festlegendeclare Setzt Shell-Variablenexport macht Shell-Variablen UmgebungsvariablenHINWEIS
declare -x VAR=VAL erstellt die Shell-Variable und exportiert sie auch, wodurch sie zur Umgebungsvariablen wird.