Quelle est la différence entre set, env, declareet exportlorsque vous définissez une variable dans un shell Linux, par exemple bash?
Quelle est la différence entre set, env, declareet exportlorsque vous définissez une variable dans un shell Linux, par exemple bash?
Réponses:
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 ~#
declareet setet env? exporter vs déclarer?
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.
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' -iindicateurset: 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 .declare: sans aucune option, identique à env; peut également être utilisé pour définir la variable shellexport: fait des variables d' environnement variables d'environnementEn bref:
set ne définit pas de variables d'environnement ni de shellenv peut définir des variables d'environnement pour une seule commandedeclare définit les variables shellexport fait des variables d'environnement des variables d'environnementREMARQUE
declare -x VAR=VAL crée la variable shell et l'exporte également, ce qui en fait une variable d'environnement.