Quelle est la différence entre set
, env
, declare
et export
lorsque vous définissez une variable dans un shell Linux, par exemple bash
?
Quelle est la différence entre set
, env
, declare
et export
lorsque 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 ~#
declare
et set
et env
? exporter vs déclarer?
Tout d'abord, vous devez comprendre cela environment variables
et ce shell variables
n'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' -i
indicateurset
: sans options, le nom et la valeur de chaque variable shell sont affichés * ~ à partir de l'exécution man set
dans 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.