RANDOMbukan 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 pdkshpada OpenBSD, RANDOMakan terdaftar setbahkan jika sebelumnya tidak digunakan.
Sisa dari jawaban ini menyangkut apa yang bisa diharapkan terjadi jika RANDOMdiekspor (yaitu diubah menjadi variabel lingkungan).
Mengekspornya export RANDOMakan 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 pdkshOpenBSD 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 RANDOMakan tetap statis terlepas dari penggunaan RANDOMdi shell (di mana setiap penggunaan $RANDOMmasih akan memberikan nilai baru).
Ini karena setiap referensi ke variabel shell RANDOM di bashmembuat 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 bashvariabel, seperti LINENO, SECONDS, BASHPIDdll
Untuk memperbarui variabel lingkungan RANDOMdi 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 bashatau tidak (tapi tebakan yang berpendidikan adalah bahwa itu tidak).
envbukan perintah shell karena biasanya tidak dibangun ke dalam shell.