RANDOM
n'est pas une variable d'environnement. C'est une variable shell maintenue par certains shells. Il n'est généralement pas exporté par défaut. C'est pourquoi il n'apparaît pas dans la sortie de env
.
Une fois qu'il a été utilisé au moins une fois, il serait affiché dans la sortie set
, qui, par lui - même, énumère les variables shell (et fonctions) et leurs valeurs dans la session shell en cours. Ce comportement dépend du shell et l'utilisation pdksh
d'OpenBSD RANDOM
serait répertorié set
même s'il n'était pas utilisé auparavant.
Le reste de cette réponse concerne ce qui pourrait se produire s'il RANDOM
était exporté (c'est-à-dire transformé en variable d'environnement).
L'exporter avec en export RANDOM
ferait une variable d'environnement mais son utilisation serait sévèrement limitée car sa valeur dans un processus enfant serait "aléatoire mais statique" (ce qui signifie que ce serait un nombre aléatoire immuable). Le comportement exact diffère entre les coques.
J'utilise pdksh
sur OpenBSD dans l'exemple ci-dessous et j'obtiens une nouvelle valeur aléatoire à chaque awk
exécution (mais la même valeur à chaque fois dans la même awk
instance). En utilisant bash
, j'obtiendrais exactement la même valeur aléatoire dans toutes les invocations de awk
.
$ awk 'BEGIN { print ENVIRON["RANDOM"], ENVIRON["RANDOM"] }'
25444 25444
$ awk 'BEGIN { print ENVIRON["RANDOM"], ENVIRON["RANDOM"] }'
30906 30906
Dans bash
, la valeur exportée de RANDOM
resterait statique quelle que soit l'utilisation de RANDOM
dans le shell (où chaque utilisation de $RANDOM
donnerait toujours une nouvelle valeur).
En effet, chaque référence à la variable shell RANDOM
dans bash
le shell accède à sa get_random()
fonction interne pour donner à la variable une nouvelle valeur aléatoire, mais le shell ne met pas à jour la variable d'environnement RANDOM
. Ceci est similaire dans le comportement comme avec d' autres dynamiques bash
variables, telles que LINENO
, SECONDS
, BASHPID
etc.
Pour mettre à jour la variable d'environnement RANDOM
dans bash
, vous devez lui affecter la valeur de la variable shell RANDOM
et la réexporter:
export RANDOM="$RANDOM"
Il n'est pas clair pour moi si cela aurait l'effet secondaire supplémentaire de réensemencer le générateur de nombres aléatoires bash
ou non (mais une supposition éclairée serait que ce n'est pas le cas).
env
n'est pas une commande shell car elle n'est généralement pas intégrée au shell.