Saya telah menggunakan $((1 + RANDOM % 1000))
untuk menghasilkan nomor acak.
Apakah mungkin melakukan sesuatu yang serupa tetapi menyediakan benih?
Jadi, jika diberi benih yang sama, nomor acak yang sama akan selalu dihasilkan?
Tetapkan nilai seed untuk 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
$
Perhatikan bahwa kutipan tunggal digunakan; tanda kutip ganda menjalankan aturan interpolasi shell 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
$
karena $RANDOM
sedang diinterpolasi oleh shell induk sebelum bash -c ...
proses anak dijalankan. Gunakan tanda kutip tunggal untuk mematikan interpolasi (seperti yang ditunjukkan di atas) atau mencegah interpolasi:
$ 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
$
Fitur RANDOM
ini disebutkan dalam bash(1)
manual
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.
random=$(bash -c "RANDOM=640; echo $RANDOM")
bukankah seharusnya kembali sama setiap kali? Atau karena$(bash ...
itu tidak diperlakukan sebagai contoh baru dari bash?set -x; FOO=42; bash -c "FOO=999; echo $FOO"
. Kutipan ganda memungkinkan kulit terluar untuk diganti$RANDOM
dengan acak kulit terluar; shell bash bagian dalam hanya menggemakan bilangan bulat.random=$(bash -c "RANDOM=$mac; echo $RANDOM")
bash -c 'RANDOM=42; echo "$RANDOM" "$RANDOM" "$RANDOM"'
.