RANDOM
No es una variable de entorno. Es una variable de shell mantenida por algunos shells. Generalmente no se exporta por defecto. Es por eso que no aparece en la salida de env
.
Una vez que se ha utilizado al menos una vez, sería aparecer en la salida de set
, que, por sí mismo, las listas de las variables de shell (y funciones) y sus valores en la sesión shell actual. Este comportamiento depende del shell y el uso pdksh
en OpenBSD RANDOM
se enumeraría set
incluso si no se usaba anteriormente.
El resto de esta respuesta se refiere a lo que podría esperarse que suceda si RANDOM
se exporta (es decir, se convierte en una variable de entorno).
Exportarlo lo export RANDOM
convertiría en una variable de entorno, pero su uso estaría muy limitado ya que su valor en un proceso secundario sería "aleatorio pero estático" (lo que significa que sería un número aleatorio inmutable). El comportamiento exacto difiere entre los depósitos.
Estoy usando pdksh
OpenBSD en el ejemplo a continuación y obtengo un nuevo valor aleatorio en cada awk
ejecución (pero el mismo valor cada vez dentro de la misma awk
instancia). Utilizando bash
, obtendría exactamente el mismo valor aleatorio en todas las invocaciones de awk
.
$ awk 'BEGIN { print ENVIRON["RANDOM"], ENVIRON["RANDOM"] }'
25444 25444
$ awk 'BEGIN { print ENVIRON["RANDOM"], ENVIRON["RANDOM"] }'
30906 30906
En bash
, el valor exportado de RANDOM
permanecería estático independientemente del uso de RANDOM
en el shell (donde cada uso de $RANDOM
todavía daría un nuevo valor).
Esto se debe a que cada referencia a la variable de shell RANDOM
en bash
hace que el shell acceda a su get_random()
función interna para darle a la variable un nuevo valor aleatorio, pero el shell no actualiza la variable de entorno RANDOM
. Esto es similar en comportamiento como con otras dinámicas bash
variables, tales como LINENO
, SECONDS
, BASHPID
etc.
Para actualizar la variable de entorno RANDOM
en bash
, habría que asignarle el valor de la variable de shell RANDOM
y reexportación que:
export RANDOM="$RANDOM"
Para mí no está claro si esto tendría el efecto secundario adicional de volver a sembrar el generador de números aleatorios bash
o no (pero una suposición educada sería que no lo hace).
env
no es un comando de shell ya que generalmente no está integrado en el shell.