Tôi đã sử dụng $((1 + RANDOM % 1000))
để tạo một số ngẫu nhiên.
Có thể làm một cái gì đó tương tự nhưng cung cấp một hạt giống?
Vì vậy, cho cùng một hạt giống số ngẫu nhiên giống nhau sẽ luôn luôn là đầu ra?
Tôi đã sử dụng $((1 + RANDOM % 1000))
để tạo một số ngẫu nhiên.
Có thể làm một cái gì đó tương tự nhưng cung cấp một hạt giống?
Vì vậy, cho cùng một hạt giống số ngẫu nhiên giống nhau sẽ luôn luôn là đầu ra?
Câu trả lời:
Gán giá trị hạt giống cho RANDOM
$ bash -c 'RANDOM=640; echo $RANDOM $RANDOM $RANDOM'
28612 27230 24923
$ bash -c 'RANDOM=640; echo $RANDOM $RANDOM $RANDOM'
28612 27230 24923
$ bash -c 'RANDOM=640; echo $RANDOM $RANDOM $RANDOM'
28612 27230 24923
$
Lưu ý rằng dấu ngoặc đơn được sử dụng; báo giá kép chạy quy tắc nội suy vỏ afoul:
$ bash -c 'RANDOM=42; echo $RANDOM $RANDOM $RANDOM'
19081 17033 15269
$ RANDOM=42
$ bash -c "RANDOM=640; echo $RANDOM"
19081
$ bash -c "RANDOM=640; echo $RANDOM"
17033
$ bash -c "RANDOM=640; echo $RANDOM"
15269
$
bởi vì $RANDOM
đang được nội suy bởi trình bao cha mẹ trước khi bash -c ...
tiến trình con được chạy. Sử dụng dấu ngoặc đơn để tắt phép nội suy (như được hiển thị ở trên) hoặc ngăn cách nội suy:
$ RANDOM=42
$ SEED_FOR_MY_GAME=640
$ bash -c "RANDOM=$SEED_FOR_MY_GAME; echo \$RANDOM"
28612
$ bash -c "RANDOM=$SEED_FOR_MY_GAME; echo \$RANDOM"
28612
$
Tính năng RANDOM
này được đề cập trong bash(1)
hướng dẫn
RANDOM Each time this parameter is referenced, a random integer between
0 and 32767 is generated. The sequence of random numbers may be
initialized by assigning a value to RANDOM. If RANDOM is unset,
it loses its special properties, even if it is subsequently
reset.
set -x; FOO=42; bash -c "FOO=999; echo $FOO"
. Các dấu ngoặc kép đang cho phép lớp vỏ ngoài thay thế $RANDOM
bằng ngẫu nhiên của lớp vỏ ngoài; shell bash bên trong chỉ đơn giản là lặp lại một số nguyên.
random=$(bash -c "RANDOM=$mac; echo $RANDOM")
bash -c 'RANDOM=42; echo "$RANDOM" "$RANDOM" "$RANDOM"'
.
random=$(bash -c "RANDOM=640; echo $RANDOM")
không nên trả lại như vậy mỗi lần? Hoặc là bởi vì$(bash ...
không được coi là một trường hợp mới của bash?