RANDOM
não é uma variável de ambiente. É uma variável de shell mantida por algumas conchas. Geralmente não é exportado por padrão. É por isso que ele não aparece na saída de env
.
Uma vez que foi usado pelo menos uma vez, ele iria aparecer na saída set
, o que, por si só, lista as variáveis do shell (e funções) e seus valores na sessão shell atual. Esse comportamento é dependente do shell e usa pdksh
no OpenBSD,RANDOM
seria listado set
mesmo se não fosse usado anteriormente.
O restante desta resposta diz respeito ao que se poderia esperar se RANDOM
fosse exportado (ou seja, transformado em uma variável de ambiente).
Exportando-o com export RANDOM
tornaria uma variável de ambiente, mas seu uso seria severamente limitado, pois seu valor em um processo filho seria "aleatório, mas estático" (o que significa que seria um número aleatório imutável). O comportamento exato difere entre as conchas.
Estou usando o pdksh
OpenBSD no exemplo abaixo e recebo um novo valor aleatório em cada awk
execução (mas o mesmo valor todas as vezes na mesma awk
instância). Usando bash
, eu obteria exatamente o mesmo valor aleatório em todas as invocações deawk
.
$ awk 'BEGIN { print ENVIRON["RANDOM"], ENVIRON["RANDOM"] }'
25444 25444
$ awk 'BEGIN { print ENVIRON["RANDOM"], ENVIRON["RANDOM"] }'
30906 30906
Em bash
, o valor exportado de RANDOM
permaneceria estático, independentemente do uso deRANDOM
no shell (onde cada uso de $RANDOM
ainda daria um novo valor).
Isso ocorre porque cada referência à variável shell RANDOM
em bash
torna o acesso shell a sua interno get_random()
função para dar a variável um novo valor aleatório, mas o shell não atualiza a variável de ambiente RANDOM
. Este é um comportamento semelhante como com outros dinâmicas bash
variáveis, tais como LINENO
, SECONDS
, BASHPID
etc.
Para atualizar a variável de ambiente RANDOM
em bash
, você teria que atribuir-lhe o valor da variável de shell RANDOM
e re-exportá-lo:
export RANDOM="$RANDOM"
Não está claro para mim se isso teria o efeito colateral adicional de re-semear o gerador de números aleatórios bash
ou não (mas um palpite fundamentado seria que não existe).
env
não é um comando do shell, pois geralmente não é incorporado ao shell.