RANDOM
bukan variabel lingkungan. Ini adalah variabel shell yang dikelola oleh beberapa shell. Biasanya tidak diekspor secara default. Inilah sebabnya mengapa itu tidak muncul di output env
.
Setelah digunakan setidaknya sekali, itu akan muncul di output set
, yang, dengan sendirinya, mencantumkan variabel shell (dan fungsi) dan nilainya dalam sesi shell saat ini. Perilaku ini tergantung pada shell dan digunakan pdksh
pada OpenBSD, RANDOM
akan terdaftar set
bahkan jika sebelumnya tidak digunakan.
Sisa dari jawaban ini menyangkut apa yang bisa diharapkan terjadi jika RANDOM
diekspor (yaitu diubah menjadi variabel lingkungan).
Mengekspornya export RANDOM
akan menjadikannya variabel lingkungan tetapi penggunaannya akan sangat terbatas karena nilainya dalam proses anak akan "acak tetapi statis" (artinya itu akan menjadi angka acak yang tidak berubah). Perilaku yang tepat berbeda antara shell.
Saya menggunakan pdksh
OpenBSD pada contoh di bawah ini dan saya mendapatkan nilai acak baru di setiap proses awk
(tetapi nilai yang sama setiap kali dalam waktu yang samaawk
contoh yang ). Menggunakan bash
, saya akan mendapatkan nilai acak yang persis sama di semua doa awk
.
$ awk 'BEGIN { print ENVIRON["RANDOM"], ENVIRON["RANDOM"] }'
25444 25444
$ awk 'BEGIN { print ENVIRON["RANDOM"], ENVIRON["RANDOM"] }'
30906 30906
Dalam bash
, nilai yang diekspor RANDOM
akan tetap statis terlepas dari penggunaan RANDOM
di shell (di mana setiap penggunaan $RANDOM
masih akan memberikan nilai baru).
Ini karena setiap referensi ke variabel shell RANDOM
di bash
membuat shell mengakses get_random()
fungsi internal untuk memberikan variabel nilai acak baru, tetapi shell tidak memperbarui variabel lingkungan RANDOM
. Hal ini mirip dalam perilaku seperti dengan dinamis lainnya bash
variabel, seperti LINENO
, SECONDS
, BASHPID
dll
Untuk memperbarui variabel lingkungan RANDOM
di bash
, Anda harus menetapkan nilai variabel shellRANDOM
dan -ekspor ulang itu:
export RANDOM="$RANDOM"
Tidak jelas bagi saya apakah ini akan memiliki efek samping tambahan dari penyemaian ulang nomor acak generator di bash
atau tidak (tapi tebakan yang berpendidikan adalah bahwa itu tidak).
env
bukan perintah shell karena biasanya tidak dibangun ke dalam shell.