RANDOM
ist keine Umgebungsvariable. Es ist eine Shell-Variable, die von einigen Shells verwaltet wird. Es wird in der Regel nicht standardmäßig exportiert. Aus diesem Grund wird es in der Ausgabe von nicht angezeigt env
.
Sobald es einmal zumindest verwendet wird worden, es würde in der Ausgabe erscheinen set
, die, für sich allein, führt die Shell - Variablen (und Funktionen) und deren Werte in der aktuellen Shell - Sitzung. Dieses Verhalten ist abhängig von der Schale und mit pdksh
auf OpenBSD, RANDOM
würde von der Liste aufgeführt werden , set
auch wenn nicht zuvor verwendet hat .
Der Rest dieser Antwort bezieht sich darauf, was zu erwarten ist, wenn RANDOM
es exportiert (dh in eine Umgebungsvariable umgewandelt) wurde.
Wenn Sie es mit exportieren export RANDOM
, wird es zu einer Umgebungsvariablen, die Verwendung ist jedoch stark eingeschränkt, da der Wert in einem untergeordneten Prozess "zufällig, aber statisch" ist (dh, es handelt sich um eine unveränderliche Zufallszahl). Das genaue Verhalten unterscheidet sich zwischen den Schalen.
Ich verwende pdksh
OpenBSD im folgenden Beispiel und erhalte bei jedem awk
Lauf einen neuen Zufallswert (aber jedes Mal den gleichen Wert innerhalb derselben awk
Instanz). Mit bash
würde ich in allen Aufrufen von genau den gleichen Zufallswert erhalten awk
.
$ awk 'BEGIN { print ENVIRON["RANDOM"], ENVIRON["RANDOM"] }'
25444 25444
$ awk 'BEGIN { print ENVIRON["RANDOM"], ENVIRON["RANDOM"] }'
30906 30906
In würde bash
der exportierte Wert von RANDOM
statisch bleiben, unabhängig von der Verwendung RANDOM
in der Shell (wobei jede Verwendung von $RANDOM
immer noch einen neuen Wert ergeben würde).
Dies liegt daran, dass bei jedem Verweis auf die Shell-Variable RANDOM
in bash
die Shell auf ihre interne get_random()
Funktion zugegriffen wird, um der Variablen einen neuen Zufallswert zu geben, die Shell jedoch die Umgebungsvariable nicht aktualisiert RANDOM
. Dies ist ähnlich im Verhalten wie bei anderen dynamischen bash
Variablen, wie LINENO
, SECONDS
, BASHPID
usw.
Um die Umgebungsvariable RANDOM
in zu aktualisieren bash
, müssten Sie ihr den Wert der Shell-Variablen zuweisen RANDOM
und sie erneut exportieren:
export RANDOM="$RANDOM"
Es ist mir unklar, ob dies den zusätzlichen Nebeneffekt haben würde, den Zufallszahlengenerator wieder einzuspielen bash
oder nicht (aber eine fundierte Vermutung wäre, dass dies nicht der Fall ist).
env
ist kein Shell-Befehl, da er normalerweise nicht in die Shell integriert ist.