Di ksh
, Bash, Zsh, Yash atau BusyBox sh
:
[ "$RANDOM" -lt 3277 ] && do_stuff
The RANDOM
variabel khusus dari Korn, Bash, Yash, Z dan kerang BusyBox menghasilkan nilai integer desimal pseudo-acak antara 0 dan 32.767 setiap kali itu dievaluasi, sehingga di atas memberikan (dekat) satu-in-sepuluh kesempatan.
Anda dapat menggunakan ini untuk menghasilkan fungsi yang berperilaku seperti yang dijelaskan dalam pertanyaan Anda, setidaknya di Bash:
function chance {
[[ -z $1 || $1 -le 0 ]] && return 1
[[ $RANDOM -lt $((32767 / $1 + 1)) ]]
}
Lupa memberikan argumen, atau memberikan argumen yang tidak valid, akan menghasilkan hasil 1, jadi chance && do_stuff
tidak akan pernah do_stuff
.
Ini menggunakan rumus umum untuk penggunaan “1 in n ” $RANDOM
, yaitu [[ $RANDOM -lt $((32767 / n + 1)) ]]
, memberikan (⎣32767 / n ⎦ + 1) pada peluang 32768. Nilai n
yang bukan merupakan faktor 32768 menimbulkan bias karena perbedaan yang tidak merata dalam rentang nilai yang mungkin.