RANDOMist 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 pdkshauf OpenBSD, RANDOMwürde von der Liste aufgeführt werden , setauch wenn nicht zuvor verwendet hat .
Der Rest dieser Antwort bezieht sich darauf, was zu erwarten ist, wenn RANDOMes 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 pdkshOpenBSD im folgenden Beispiel und erhalte bei jedem awkLauf einen neuen Zufallswert (aber jedes Mal den gleichen Wert innerhalb derselben awkInstanz). Mit bashwü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 bashder exportierte Wert von RANDOMstatisch bleiben, unabhängig von der Verwendung RANDOMin der Shell (wobei jede Verwendung von $RANDOMimmer noch einen neuen Wert ergeben würde).
Dies liegt daran, dass bei jedem Verweis auf die Shell-Variable RANDOM in bashdie 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 bashVariablen, wie LINENO, SECONDS, BASHPIDusw.
Um die Umgebungsvariable RANDOMin 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 bashoder nicht (aber eine fundierte Vermutung wäre, dass dies nicht der Fall ist).
envist kein Shell-Befehl, da er normalerweise nicht in die Shell integriert ist.