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не є командою оболонки, оскільки вона зазвичай не вбудована в оболонку.