RANDOM
bir ortam değişkeni değil. Bazı mermiler tarafından tutulan bir kabuk değişkenidir. Genellikle varsayılan olarak dışa aktarılmaz. Bu yüzden çıktısında görünmüyor env
.
Bir zamanlar en azından kullanılan konduktan sonra, bu olur çıktısında göstermek set
, hangi kendisi tarafından, listeler geçerli kabuk oturumunda kabuk değişkenleri (ve fonksiyonları) ve bunların değerleri. Bu davranış kabuğa bağlıdır ve pdksh
OpenBSD'de kullanıldığında, RANDOM
daha set
önce kullanılmasa bile listelenir .
Bu cevabın geri kalanı RANDOM
, ihraç edildiğinde ne olabileceği ile ilgilidir (yani bir ortam değişkenine dönüşmüş).
Onu dışa aktarmak export RANDOM
, onu bir ortam değişkeni yapacaktır ancak bir alt işlemdeki değeri "rasgele ama statik" olacağı için kullanımı ciddi şekilde sınırlı olacaktır (yani, değişmeyen bir rasgele sayı olacaktır). Tam davranış kabukları arasında değişir.
pdksh
Aşağıdaki örnekte OpenBSD kullanıyorum ve her awk
çalıştırmada yeni bir rastgele değer elde ediyorum (ancak aynı durumda her zaman aynı değer awk
). Kullanarak bash
, tüm davetlerde tam olarak aynı rastgele değeri elde ederdim awk
.
$ awk 'BEGIN { print ENVIRON["RANDOM"], ENVIRON["RANDOM"] }'
25444 25444
$ awk 'BEGIN { print ENVIRON["RANDOM"], ENVIRON["RANDOM"] }'
30906 30906
İçinde bash
, dışa aktarılan değer , kabuktaki RANDOM
kullanımdan bağımsız olarak statik kalır RANDOM
(her bir kullanımın $RANDOM
hala yeni bir değer vereceği).
Her referans Bunun nedeni kabuk değişkeni RANDOM
içinde bash
kabuk erişim iç kılan get_random()
işlevi değişkeni yeni bir rastgele değer vermek için, ama kabuk güncelleme gelmez ortam değişkeni RANDOM
. Bu, diğer dinamik gibi davranış benzerdir bash
gibi değişkenler, LINENO
, SECONDS
, BASHPID
vs.
Ortam değişkeni güncellemek için RANDOM
de bash
, bunu kabuk değişkeninin değerini atamak zorunda kalacak RANDOM
ve yeniden ihracat it:
export RANDOM="$RANDOM"
Bunun rasgele sayı üretecinin tekrar tohumlanmasında ek bir yan etkisinin olup olmayacağı benim için net bash
değil (ama eğitimli bir tahmin yapmaz).
env
bir kabuk komutu değildir, çünkü genellikle kabuğun içine yerleştirilmez.