Was ist der Unterschied zwischen set
, env
, declare
und export
wenn eine Variable in einem Linux - Shell, wie Einstellung bash
?
Was ist der Unterschied zwischen set
, env
, declare
und export
wenn 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 ~#
declare
und set
und env
? Export vs deklarieren?
Erstens müssen Sie das verstehen environment variables
und shell variables
sind 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 -i
Flag festzulegenset
: ohne Optionen werden der Name und der Wert jeder Shell-Variablen angezeigt * ~, man set
wenn 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.