Quelqu'un m'a dit que:
BASH n'est pas une variable d'environnement, c'est une variable shell
Quelle est la différence?
$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.
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
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.
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
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).
Lire d'autres questions sur les étiquettes command-line bash environment-variables