Quelle est la différence entre définir, env, déclarer et exporter lors de la définition d'une variable dans un shell Linux?

17

Quelle est la différence entre set, env, declareet exportlorsque vous définissez une variable dans un shell Linux, par exemple bash?

user3872279
la source
1
Pourquoi cette question a-t-elle été rejetée?
l0b0

Réponses:

5

Il semble que set et declare soient légèrement différents, set étant plus puissant.

Voir «déclarer» sous https://www.gnu.org/software/bash/manual/bash.html#Bash-Builtins déclarer: «Déclarez les variables et donnez-leur des attributs. Si aucun nom n'est donné, affichez les valeurs des variables au lieu.

Définissez "définir" sous https://www.gnu.org/software/bash/manual/bash.html#The-Set-Builtin * set: "Cette fonction intégrée est si compliquée qu'elle mérite sa propre section. Set vous permet de modifier les valeurs des options du shell et définir les paramètres de position, ou pour afficher les noms et les valeurs des variables du shell. "

ENV est une variable d'environnement dans Bash: https://www.gnu.org/software/bash/manual/bash.html#Bash-Variables env est une commande Linux. Je pense que c'est une bonne référence: /unix/103467/what-is-env-command-doing

Je pensais que c'était une bonne explication de l'exportation: http://www.unix.com/302531838-post2.html

Aussi: https://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins * export (de Bourne): "Marquez chaque nom à transmettre aux processus enfants de l'environnement."

Code emprunteur de l'URL ci-dessus:

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.
la source
declareet setet env? exporter vs déclarer?
Pacerier
Je dois voter contre car cela ne répond tout simplement pas à la question.
Daniel C.Sobral
Faites-moi savoir si c'est mieux.
Shawn P.
1

Tout d'abord, vous devez comprendre cela environment variableset ce shell variablesn'est pas la même chose.

Ensuite, vous devez savoir que les shells ont des attributs qui régissent leur fonctionnement. Ces attributs ne sont pas des variables d'environnement ni de shell.

Maintenant, pour répondre à votre question.

  1. env: sans aucune option, affiche les variables d'environnement actuelles avec leurs valeurs; Cependant, peut être utilisé pour définir la variable d'environnement pour une seule commande avec l' -iindicateur
  2. set: sans options, le nom et la valeur de chaque variable shell sont affichés * ~ à partir de l'exécution man setdans rhel; peut également être utilisé pour définir l' attribut shell . Cette commande NE définit PAS l' environnement ni la variable shell .
  3. declare: sans aucune option, identique à env; peut également être utilisé pour définir la variable shell
  4. export: fait des variables d' environnement variables d'environnement

En bref:

  1. set ne définit pas de variables d'environnement ni de shell
  2. env peut définir des variables d'environnement pour une seule commande
  3. declare définit les variables shell
  4. export fait des variables d'environnement des variables d'environnement

REMARQUE declare -x VAR=VAL crée la variable shell et l'exporte également, ce qui en fait une variable d'environnement.

Tran Triet
la source