Was ist der Unterschied zwischen set, env, declare und export, wenn eine Variable in einer Linux-Shell gesetzt wird?

17

Was ist der Unterschied zwischen set, env, declareund exportwenn eine Variable in einem Linux - Shell, wie Einstellung bash?

user3872279
quelle
1
Warum wurde diese Frage abgelehnt?
l0b0

Antworten:

5

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 ~#
Shawn P.
quelle
declareund setund env? Export vs deklarieren?
Pacerier
Ich muss das ablehnen, weil es die Frage einfach nicht beantwortet.
Daniel C. Sobral
Lassen Sie mich wissen, ob dies besser ist.
Shawn P.
1

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.

  1. 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 festzulegen
  2. set: 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 .
  3. declare: ohne Optionen, dasselbe wie env; kann auch verwendet werden, um die Shell-Variable zu setzen
  4. export: Erstellt Umgebungsvariablen für Shell- Variablen

Zusamenfassend:

  1. set setzt weder Shell noch Umgebungsvariablen
  2. env kann Umgebungsvariablen für einen einzelnen Befehl festlegen
  3. declare Setzt Shell-Variablen
  4. export macht Shell-Variablen Umgebungsvariablen

HINWEIS declare -x VAR=VAL erstellt die Shell-Variable und exportiert sie auch, wodurch sie zur Umgebungsvariablen wird.

Tran Triet
quelle