Taper ce qui suit dans Bash:
env | grep USER
et
set | grep USER
donne aux deux fois le même nom d'utilisateur.
Comment savoir, par exemple lors de la saisie, echo $USER
si le shell ou la variable d'environnement a été affiché?
la source
Taper ce qui suit dans Bash:
env | grep USER
et
set | grep USER
donne aux deux fois le même nom d'utilisateur.
Comment savoir, par exemple lors de la saisie, echo $USER
si le shell ou la variable d'environnement a été affiché?
Pour les shells compatibles POSIX (y compris Bash), la norme dit:
2.5.3 Variables du shell Les
variables doivent être initialisées à partir de l'environnement [...] Si une variable est initialisée à partir de l'environnement, elle doit être marquée pour l'exportation immédiatement; voir l'export spécial intégré. De nouvelles variables peuvent être définies et initialisées avec des affectations de variables, [etc.]
Et sur export
:
export name[=word]...
Le shell doit attribuer l'attribut export aux variables correspondant aux noms spécifiés, ce qui doit les placer dans l'environnement des commandes exécutées ultérieurement.
Du point de vue du shell, il n'y a donc que des variables. Certains d'entre eux peuvent provenir de l'environnement au démarrage du shell, et certains d'entre eux peuvent être exportés vers l'environnement des processus que le shell démarre.
(L '"environnement" n'est en réalité qu'un tas de chaînes passées au processus lorsqu'il démarre. Lorsque le processus est en cours d'exécution, il peut faire ce qu'il veut avec cela, l'utiliser, l'ignorer, l'écraser. Et ce qu'un processus transmet lors du démarrage d'autres processus peut être une autre chose, mais bien sûr, il est habituel de simplement transmettre à nouveau toutes les variables d'environnement.)
Si vous utilisiez un shell non POSIX, tel que csh
, les choses pourraient être différentes:
$ csh
% echo $foo
foo: Undefined variable.
% setenv foo bar
% echo $foo
bar
% set foo=asdf
% echo $foo
asdf
% env |grep foo
foo=bar
% exit
Ce sont la même variable. Dans le shell, contrairement à la plupart des autres langages de programmation, les variables d'environnement et les variables de shell partagent le même espace de noms. Dans le shell, une variable d'environnement est une variable shell qui a été exportée avec
export
.Voir, par exemple, ma réponse à votre question précédente " Quelle est la différence d'utilisation entre les variables shell et les variables d'environnement? "
la source
La variable shell ne peut être utilisée que pour le shell actuel, elle ne peut pas être utilisée à l'échelle du système. À l'autre extrémité, la variable environnementale peut être utilisée à l'échelle du système. Par convention, la variable shell est écrite en minuscules tandis que la variable environnementale est écrite en majuscules. Vous pouvez faire fonctionner une variable shell comme variable d'environnement, il vous suffit de l'exporter.
la source