RANDOMnie jest zmienną środowiskową. Jest to zmienna powłoki obsługiwana przez niektóre powłoki. Zwykle nie jest eksportowany domyślnie. Dlatego nie pojawia się na wyjściu env.
Raz to było wykorzystywane co najmniej raz, by pokazać się na wyjściu set, który sam w sobie, listy zmienne powłoki (i funkcje) i ich wartości w bieżącej sesji powłoki. To zachowanie zależy od powłoki i użycia pdkshna OpenBSD, RANDOMbyłoby wymienione na liście, setnawet jeśli nie było wcześniej używane.
Pozostała część odpowiedzi dotyczy tego, czego można się było spodziewać, gdyby RANDOMzostał wyeksportowany (tj. Przekształcony w zmienną środowiskową).
Wyeksportowanie go export RANDOMspowoduje, że będzie zmienną środowiskową, ale jego użycie byłoby poważnie ograniczone, ponieważ jego wartość w procesie potomnym byłaby „losowa, ale statyczna” (co oznacza, że byłaby niezmienną liczbą losową). Dokładne zachowanie różni się w zależności od powłoki.
Korzystam pdkshz OpenBSD w poniższym przykładzie i otrzymuję nową losową wartość przy każdym awkuruchomieniu (ale tę samą wartość za każdym razem w tej samej awkinstancji). Używając bash, uzyskałbym dokładnie tę samą losową wartość we wszystkich wywołaniach awk.
$ awk 'BEGIN { print ENVIRON["RANDOM"], ENVIRON["RANDOM"] }'
25444 25444
$ awk 'BEGIN { print ENVIRON["RANDOM"], ENVIRON["RANDOM"] }'
30906 30906
W bash, wyeksportowana wartość RANDOMpozostałaby statyczna bez względu na użycie RANDOMw powłoce (gdzie każde użycie $RANDOMwciąż dawałoby nową wartość).
To dlatego, że każde odwołanie do zmiennej powłoki RANDOM w bashsprawia, że dostęp do powłoki jej wewnętrzna get_random()funkcja dać zmiennej nową wartość losową, ale powłoka nie aktualizuje zmienną środowiskową RANDOM . Jest to podobne do zachowania jak w przypadku innych dynamicznych bashzmiennych, takich jak LINENO, SECONDS, BASHPIDitp
Aby zaktualizować zmienną środowiskową RANDOMw bash, trzeba by przypisać mu wartość zmiennej powłoki RANDOM i reeksportu go:
export RANDOM="$RANDOM"
Nie jest dla mnie jasne, czy miałoby to dodatkowy efekt uboczny ponownego uruchomienia generatora liczb losowych, bashczy też nie (ale zgadywano by, że tak nie jest).
envnie jest poleceniem powłoki, ponieważ zwykle nie jest wbudowane w powłokę.