Variables shell
Les variables shell sont des variables dont la portée se trouve dans la session shell actuelle, par exemple dans une session shell interactive ou un script.
Vous pouvez créer une variable shell en attribuant une valeur à un nom inutilisé:
var="hello"
L'utilisation de variables shell est de garder une trace des données dans la session en cours. Les variables shell ont généralement des noms avec des lettres minuscules.
Variables d'environnement
Une variable d'environnement est une variable shell qui a été exportée. Cela signifie qu'elle sera visible en tant que variable, non seulement dans la session shell qui l'a créée, mais aussi pour tout processus (pas seulement les shells) démarré à partir de cette session.
VAR="hello" # shell variable created
export VAR # variable now part of the environment
ou
export VAR="hello"
Une fois qu'une variable shell a été exportée, elle reste exportée jusqu'à ce qu'elle ne soit pas définie, ou jusqu'à ce que sa "propriété d'exportation" soit supprimée (avec export -n
in bash
), il n'est donc généralement pas nécessaire de la réexporter. La suppression d'une variable avec la unset
supprime (que ce soit une variable d'environnement ou non).
Les tableaux et les hachages associatifs dans bash
et d'autres shells ne peuvent pas être exportés pour devenir des variables d'environnement. Les variables d'environnement doivent être de simples variables dont les valeurs sont des chaînes, et elles ont souvent des noms composés de lettres majuscules.
L'utilisation de variables d'environnement permet de garder une trace des données dans la session shell actuelle, mais aussi de permettre à tout processus démarré de prendre partie de ces données. Le cas typique de ceci est la PATH
variable d'environnement, qui peut être définie dans le shell et utilisée plus tard par n'importe quel programme qui veut démarrer des programmes sans spécifier un chemin complet vers eux.
La collection de variables d'environnement dans un processus est souvent appelée "l'environnement du processus". Chaque processus a son propre environnement.
Les variables d'environnement ne peuvent être "transférées", c'est-à-dire qu'un processus enfant ne peut jamais modifier les variables d'environnement dans son processus parent, et autre que la configuration de l'environnement pour un processus enfant au démarrage, un processus parent ne peut pas modifier l'environnement existant d'un processus enfant.
Les variables d'environnement peuvent être répertoriées avec env
(sans aucun argument). En dehors de cela, elles apparaissent de la même manière que les variables shell non exportées dans une session shell. C'est un peu spécial pour le shell car la plupart des autres langages de programmation ne mélangent généralement pas les variables "ordinaires" avec les variables d'environnement (voir ci-dessous).
env
peut également être utilisé pour définir les valeurs d'une ou plusieurs variables d'environnement dans l'environnement d'un processus sans les définir dans la session en cours:
env CC=clang CXX=clang++ make
Cela commence make
avec la variable d'environnement CC
définie sur la valeur clang
et CXX
définie sur clang++
.
Il peut également être utilisé pour nettoyer l'environnement d'un processus:
env -i bash
Cela commence , bash
mais ne transfère pas l'environnement actuel au nouveau bash
processus (il faudra encore avoir des variables d'environnement car elle crée de nouvelles de ses scripts d'initialisation du shell).
Exemple de différence
$ var="hello" # create shell variable "var"
$ bash # start _new_ bash session
$ echo "$var" # no output
$ exit # back to original shell session
$ echo "$var" # "hello" is outputted
$ unset var # remove variable
$ export VAR="hello" # create environment variable "VAR"
$ bash
$ echo "$VAR" # "hello" is outputted since it's exported
$ exit # back to original shell session
$ unset VAR # remove variable
$ ( export VAR="hello"; echo "$VAR" ) # set env. var "VAR" to "hello" in subshell and echo it
$ echo "$VAR" # no output since a subshell has its own environment
Autres langues
Il existe des fonctions de bibliothèque dans la plupart des langages de programmation qui permettent d'obtenir et de définir les variables d'environnement. Notez que puisque les variables d'environnement sont stockées comme une simple relation clé-valeur, elles ne sont généralement pas des "variables" du langage. Un programme peut récupérer la valeur (qui est toujours une chaîne de caractères) correspondant à une clé (le nom de la variable d'environnement), mais devra ensuite la convertir en un entier ou quel que soit le type de données que la langue attend de la valeur.
En C, les variables d' environnement sont accessibles en utilisant getenv()
, setenv()
, putenv()
et unsetenv()
. Les variables créées avec ces routines sont héritées de la même manière par tout processus que le programme C démarre.
D'autres langages peuvent avoir des structures de données spéciales pour accomplir la même chose, comme le %ENV
hachage en Perl, ou le ENVIRON
tableau associatif dans la plupart des implémentations de awk
.