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?


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 ~#

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.