RANDOMkhông phải là một biến môi trường. Đó là một biến vỏ được duy trì bởi một số vỏ. Nó thường không được xuất theo mặc định. Đây là lý do tại sao nó không hiển thị trong đầu ra của env.
Khi nó được sử dụng ít nhất một lần, nó sẽ hiển thị trong đầu ra của setchính nó, liệt kê các biến shell (và hàm) và các giá trị của chúng trong phiên shell hiện tại. Hành vi này phụ thuộc vào trình bao và sử dụng pdkshtrên OpenBSD, RANDOMsẽ được liệt kê setngay cả khi không được sử dụng trước đó.
Phần còn lại của câu trả lời này liên quan đến những gì có thể xảy ra nếu RANDOMđược xuất khẩu (tức là biến thành một biến môi trường).
Xuất nó với nó export RANDOMsẽ biến nó thành một biến môi trường nhưng việc sử dụng nó sẽ bị hạn chế nghiêm trọng vì giá trị của nó trong một tiến trình con sẽ là "ngẫu nhiên nhưng tĩnh" (có nghĩa là nó sẽ là một số ngẫu nhiên không thay đổi). Các hành vi chính xác khác nhau giữa các vỏ.
Tôi đang sử dụng pdkshtrên OpenBSD trong ví dụ dưới đây và tôi nhận được một giá trị ngẫu nhiên mới trong mỗi lần awkchạy (nhưng cùng một giá trị mỗi lần trong cùng một awkví dụ). Sử dụng bash, tôi sẽ nhận được chính xác cùng một giá trị ngẫu nhiên trong tất cả các yêu cầu awk.
$ awk 'BEGIN { print ENVIRON["RANDOM"], ENVIRON["RANDOM"] }'
25444 25444
$ awk 'BEGIN { print ENVIRON["RANDOM"], ENVIRON["RANDOM"] }'
30906 30906
Trong bash, giá trị xuất của RANDOMsẽ vẫn tĩnh bất kể việc sử dụng RANDOMtrong trình bao (trong đó mỗi lần sử dụng $RANDOMvẫn sẽ cho một giá trị mới).
Điều này là do mỗi tham chiếu đến biến vỏ RANDOM trong bashlàm cho việc tiếp cận vỏ nội bộ của mình get_random()chức năng để cung cấp cho các biến một giá trị ngẫu nhiên mới, nhưng vỏ không cập nhật các biến môi trường RANDOM . Điều này tương tự trong hành vi như với động khác bashbiến, chẳng hạn như LINENO, SECONDS, BASHPID, vv
Để cập nhật biến môi trường RANDOMtrong bash, bạn sẽ phải gán cho nó giá trị của biến shell RANDOM và tái xuất nó:
export RANDOM="$RANDOM"
Tôi không rõ liệu điều này có tác dụng phụ bổ sung cho việc tái tạo hạt giống số ngẫu nhiên trong bashhay không (nhưng một phỏng đoán có giáo dục sẽ là nó không).
envkhông phải là lệnh shell vì nó thường không được tích hợp vào shell.