Variable d'environnement vs variable Shell, quelle est la différence?

44

Quelqu'un m'a dit que:

  

BASH n'est pas une variable d'environnement,   c'est une variable shell

Quelle est la différence?

    
posée Tom Brito 14.02.2011 - 14:08
la source

5 réponses

29

$BASH est une variable locale valide uniquement dans le shell actuel (bash).

Les variables d’environnement , telles que $SHELL , sont valables dans l’ensemble du système. Dans un shell Bash en cours, $BASH pointe vers le chemin d'exécution de bash , tandis que $SHELL pointe vers le shell défini par défaut (qui peut avoir la même valeur).

Pour une explication des variables d'environnement, consultez Variables d'environnement dans l'aide d'Ubuntu.

    
réponse donnée Takkat 14.02.2011 - 14:29
la source
34

Une variable d'environnement est un programme globalement disponible dans un programme et un programme enfant. Une variable shell n'est disponible que dans le shell actuel. Pour rendre une variable shell disponible en tant que variable d'environnement, utilisez export VARNAME (sans dollar $ ).

Exemples de clarification:

$ SOME=VAR # define shell variable $SOME
$ echo $SOME
VAR
$ env | grep SOME # note: no output
$ export SOME # turn $SOME into an environment variable
$ env | grep SOME
SOME=VAR

Une autre façon de définir une variable d'environnement:

$ export ANOTHER=VALUE
$ echo $ANOTHER
VALUE
$ env | grep ANOTHER
ANOTHER=VALUE
    
réponse donnée Lekensteyn 14.02.2011 - 14:19
la source
7

Il y a une différence. Variables Shell et variables d’environnement vous expliqueront mieux ce que je peux, mais en voici un extrait :

  

Si une modification est apportée à une variable shell, celle-ci doit être explicitement "exportée" vers la variable d'environnement correspondante pour que les sous-processus forkés puissent voir la modification. Rappelons que les variables shell sont locales au shell dans lequel elles ont été définies.

    
réponse donnée Peter.O 14.02.2011 - 14:23
la source
2

Variable de shell: à court terme, appliquée uniquement à l'instance actuelle du shell, non applicable à l'échelle du système

Variable d'environnement: utilisation à long terme, système valide dans son ensemble, autorisation globale

Par convention, la variable Shell a son nom en minuscule quand Envn. Les variables sont écrites en majuscule

    
réponse donnée Ashish 06.07.2016 - 22:39
la source
0

Pour répondre à cette question, essayez d’abord de comprendre la portée d’une variable.

Lorsque vous créez une variable telle que SOME_ENV_VARIABLE="testing.txt" , elle réside dans SHELL scope , ce qui signifie qu’elle est accessible par cette instance de shell où l’utilisateur est connecté. Lorsque l’instance change Par exemple, vous ouvrez un nouveau terminal ou vous modifiez le shell (par exemple, vous passez à csh ), vous ne pouvez pas accéder à cette variable.

Lorsque vous exportez cette variable comme export SOME_ENV_VARIABLE cette variable est désormais disponible dans l'environnement, cela signifie que dans cette instance si vous modifiez le shell, vous pouvez toujours y accéder. variable. Essayons de comprendre avec l'exemple suivant:

[[email protected]]$ SOME_ENV_VARIABLE="testing.txt" #creating variable in bash shell
[[email protected]]$ echo $SOME_ENV_VARIABLE
testing.txt
[[email protected]]$ export SOME_ENV_VARIABLE #variable now available with environment
[[email protected]]$ env | grep SOME_ENV_VARIABLE
SOME_ENV_VARIABLE=testing.txt
[[email protected]]$ csh #changing shell
[[email protected] ~/shell_scripting]$ echo $SOME_ENV_VARIABLE
testing.txt
[[email protected] ~/shell_scripting]$ exit
exit #returned to parent shell
[[email protected]]$ SOME_SHELL_VARIABLE="hello.txt"
[[email protected]]$ csh
[[email protected] ~/shell_scripting]$ echo $SOME_SHELL_VARIABLE
SOME_SHELL_VARIABLE: Undefined variable.

Analogie: supposons que vous avez un appartement de deux chambres et que vous le partagez avec un autre colocataire. La zone commune est accessible à tous, mais pas à votre chambre. La variable d'environnement est comme la zone commune et la variable variable est comme la chambre. Si vous voulez quelque chose dans la zone commune, vous pouvez la garder dans votre chambre. être consulté par vous.

N'oubliez pas que si vous ouvrez un nouveau terminal, vous ne pourrez accéder à aucune des variables car vous modifiez cette instance . Pour cela, vous devez ajouter vos variables dans .profile ou .bashrc (si vous utilisez bash).

    
réponse donnée Vishrant 23.12.2017 - 20:21
la source

Lire d'autres questions sur les étiquettes