RANDOMnon è una variabile d'ambiente. È una variabile di shell gestita da alcune shell. In genere non viene esportato per impostazione predefinita. Questo è il motivo per cui non viene visualizzato nell'output di env.
Una volta usato almeno una volta, verrebbe visualizzato nell'output di set, che, da solo, elenca le variabili (e le funzioni) della shell e i loro valori nella sessione della shell corrente. Questo comportamento dipende dalla shell e l'utilizzo pdkshsu OpenBSD, RANDOMsarebbe elencato setanche se non utilizzato in precedenza.
Il resto di questa risposta riguarda ciò che ci si potrebbe aspettare se RANDOMfosse esportato (cioè trasformato in una variabile d'ambiente).
Esportarlo con export RANDOMlo renderebbe una variabile d'ambiente ma il suo uso sarebbe fortemente limitato in quanto il suo valore in un processo figlio sarebbe "casuale ma statico" (nel senso che sarebbe un numero casuale immutabile). Il comportamento esatto differisce tra le shell.
Sto usando pdkshOpenBSD nell'esempio seguente e ottengo un nuovo valore casuale in ogni awkcorsa (ma lo stesso valore ogni volta nella stessa awkistanza). Usando bash, otterrei esattamente lo stesso valore casuale in tutte le invocazioni di awk.
$ awk 'BEGIN { print ENVIRON["RANDOM"], ENVIRON["RANDOM"] }'
25444 25444
$ awk 'BEGIN { print ENVIRON["RANDOM"], ENVIRON["RANDOM"] }'
30906 30906
In bash, il valore esportato di RANDOMrimarrebbe statico indipendentemente dall'uso RANDOMnella shell (dove ogni uso di $RANDOMdarebbe comunque un nuovo valore).
Questo perché ogni riferimento alla variabile shell RANDOM in bashfa sì che la shell acceda alla sua get_random()funzione interna per dare alla variabile un nuovo valore casuale, ma la shell non aggiorna la variabile d'ambiente RANDOM . Questo è un comportamento simile come con altri dinamiche bashvariabili, come LINENO, SECONDS, BASHPIDetc.
Per aggiornare la variabile d'ambiente RANDOMin bash, si dovrà assegnare il valore della variabile di shell RANDOM e riesportazione esso:
export RANDOM="$RANDOM"
Non mi è chiaro se questo avrebbe l'effetto collaterale aggiuntivo di ripetere il seeding del generatore di numeri casuali basho meno (ma un'ipotesi istruita sarebbe che non lo faccia).
envnon è un comando shell poiché di solito non è incorporato nella shell.