RANDOM
не является переменной среды Это переменная оболочки, поддерживаемая некоторыми оболочками. Обычно он не экспортируется по умолчанию. Вот почему он не отображается на выходе env
.
Как только он будет использован хотя бы один раз, он будет отображаться в выходных данных set
, которые сами по себе перечисляют переменные оболочки (и функции) и их значения в текущем сеансе оболочки. Это поведение зависит от оболочки и использования pdksh
в OpenBSD, RANDOM
будет перечислено, set
даже если ранее не использовался.
Остальная часть этого ответа касается того, что могло бы произойти, если бы он RANDOM
был экспортирован (то есть превращен в переменную окружения).
Экспорт с помощью export RANDOM
этого сделает переменную окружения, но его использование будет строго ограничено, поскольку его значение в дочернем процессе будет «случайным, но статическим» (то есть это будет неизменное случайное число). Точное поведение отличается между оболочками.
Я использую pdksh
OpenBSD в приведенном ниже примере и получаю новое случайное значение при каждом 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
не является командой оболочки, так как обычно она не встроена в оболочку.