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?
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?
Jawaban:
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.
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"'
.
random=$(bash -c "RANDOM=640; echo $RANDOM")
bukankah seharusnya kembali sama setiap kali? Atau karena$(bash ...
itu tidak diperlakukan sebagai contoh baru dari bash?