web-dev-qa-db-fra.com

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

Quelqu'un m'a dit que:

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

Quelle est la différence?

56
Tom Brito

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

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

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

33
Takkat

Une variable d'environnement est un programme disponible globalement, dans un programme et des programmes enfants. Une variable Shell est uniquement disponible 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
48
Lekensteyn

Il y a une différence. Variables Shell et Variables Environnementales l'expliqueront mieux que je peux, mais 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 afin que tout sous-processus fourchu puisse voir la modification. Rappelez-vous que les variables du shell sont locales au shell dans lequel elles ont été définies.

8
Peter.O

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

Variable environnementale: utilisation à long terme, valable pour l'ensemble du système, globalement autorisée

Par convention, Shell Variable a pour nom Minuscule et Envn. Les variables sont écrites en majuscules

1
Ashish

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

Lorsque vous créez une nouvelle variable telle que SOME_ENV_VARIABLE="testing.txt" elle réside dans le Shell scope, cela signifie que vous pouvez y accéder par cette instance de Shell où l'utilisateur est connecté. Lorsque l'instance change, par exemple, vous ouvrez un nouveau terminal ou vous changez le shell (par exemple, vous passez à cshname__), vous ne pouvez pas accéder à cette variable.

Lorsque vous exportez cette variable telle que export SOME_ENV_VARIABLE cette variable est maintenant disponible dans la portée de l’environnement, cela signifie que dans cette instance si vous modifiez le shell, vous pouvez toujours accéder à cette variable. Essayons de comprendre avec l'exemple suivant:

[vishrant@localhost]$ SOME_ENV_VARIABLE="testing.txt" #creating variable in bash Shell
[vishrant@localhost]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost]$ export SOME_ENV_VARIABLE #variable now available with environment
[vishrant@localhost]$ env | grep SOME_ENV_VARIABLE
SOME_ENV_VARIABLE=testing.txt
[vishrant@localhost]$ csh #changing Shell
[vishrant@localhost ~/Shell_scripting]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost ~/Shell_scripting]$ exit
exit #returned to parent Shell
[vishrant@localhost]$ SOME_Shell_VARIABLE="hello.txt"
[vishrant@localhost]$ csh
[vishrant@localhost ~/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. L’espace commun est accessible à tout le monde, mais pas à vos chambres. La variable d’environnement est semblable à un espace commun et la variable Shell à une chambre, si vous voulez quelque chose dans cet espace commun, vous pouvez y accéder mais si vous le gardez dans votre chambre, être accessible 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).

0
Vishrant