RANDOMне является переменной среды Это переменная оболочки, поддерживаемая некоторыми оболочками. Обычно он не экспортируется по умолчанию. Вот почему он не отображается на выходе env.
Как только он будет использован хотя бы один раз, он будет отображаться в выходных данных set, которые сами по себе перечисляют переменные оболочки (и функции) и их значения в текущем сеансе оболочки. Это поведение зависит от оболочки и использования pdkshв OpenBSD, RANDOMбудет перечислено, setдаже если ранее не использовался.
Остальная часть этого ответа касается того, что могло бы произойти, если бы он RANDOMбыл экспортирован (то есть превращен в переменную окружения).
Экспорт с помощью export RANDOMэтого сделает переменную окружения, но его использование будет строго ограничено, поскольку его значение в дочернем процессе будет «случайным, но статическим» (то есть это будет неизменное случайное число). Точное поведение отличается между оболочками.
Я использую pdkshOpenBSD в приведенном ниже примере и получаю новое случайное значение при каждом awkзапуске (но одно и то же значение каждый раз в одном и том же awkэкземпляре). Используя bash, я бы получил абсолютно одинаковое случайное значение во всех вызовах awk.
$ awk 'BEGIN { print ENVIRON["RANDOM"], ENVIRON["RANDOM"] }'
25444 25444
$ awk 'BEGIN { print ENVIRON["RANDOM"], ENVIRON["RANDOM"] }'
30906 30906
В bash, экспортированное значение RANDOMбудет оставаться статическим независимо от использования RANDOMв оболочке (где каждое использование по- $RANDOMпрежнему дает новое значение).
Это происходит потому , что каждая ссылка на переменную оболочки RANDOM в bashделает доступ к оболочке его внутренняя get_random()функция , чтобы дать переменной новое случайное значение, но оболочка не обновляет переменную окружения RANDOM . По поведению это похоже на другие динамические bashпеременные, такие как LINENO, SECONDSи BASHPIDт. Д.
Чтобы обновить переменные среды RANDOMв bash, вы должны присвоить ему значение переменной оболочки RANDOM и реэкспорт:
export RANDOM="$RANDOM"
Мне неясно, будет ли это иметь дополнительный побочный эффект повторного заполнения генератора случайных чисел bashили нет (но образованное предположение будет, что это не так).
envне является командой оболочки, так как обычно она не встроена в оболочку.