RANDOM
não é uma variável de ambiente. É uma variável de shell mantida por alguns shells. Geralmente não é exportado por padrão. É por isso que ele não aparece na saída de env
.
Uma vez que tenha sido usado pelo menos uma vez, apareceria na saída de set
, que, por si só, lista as variáveis (e funções) do shell e seus valores no shell atual sessão. Este comportamento é dependente do shell e usando pdksh
no OpenBSD, RANDOM
seria listado por set
mesmo se não usado anteriormente.
O restante dessa resposta diz respeito ao que poderia acontecer se RANDOM
fosse exportado (ou seja, transformado em uma variável de ambiente).
Exportá-lo com export RANDOM
tornaria uma variável de ambiente, mas seu uso seria seriamente limitado, pois seu valor em um processo filho seria "aleatório, mas estático" (significando que seria um número aleatório imutável). O comportamento exato difere entre os shells.
Estou usando pdksh
no OpenBSD no exemplo abaixo e recebo um novo valor aleatório em cada awk
run (mas o mesmo valor toda vez dentro da mesma awk
instance ). Usando bash
, eu obteria exatamente o mesmo valor aleatório em todas invocações de awk
.
$ 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 de RANDOM
no shell (em que cada uso de $RANDOM
ainda forneceria um novo valor).
Isso ocorre porque cada referência à variável shell RANDOM
in bash
faz o shell acessar sua função get_random()
interna para dar à variável um novo valor aleatório, mas o shell não atualize a variável de ambiente RANDOM
. Isso é semelhante no comportamento de outras variáveis bash
dinâmicas, como LINENO
, SECONDS
, BASHPID
etc.
Para atualizar a variável de ambiente RANDOM
in bash
, você deve atribuir a ela o valor da variável de shell RANDOM
e reexportá-la:
export RANDOM="$RANDOM"
Não está claro para mim se isso teria o efeito colateral adicional de semear o gerador de números aleatórios em bash
ou não (mas um palpite seria que isso não acontece).