【发布时间】:2023-03-13 12:16:01
【问题描述】:
var=$RANDOM 创建随机数,但我如何指定一个范围,例如 0 到 12 之间?
【问题讨论】:
标签: bash shell variables random random-sample
var=$RANDOM 创建随机数,但我如何指定一个范围,例如 0 到 12 之间?
【问题讨论】:
标签: bash shell variables random random-sample
如果你已经有了你的随机数,你可以说
var=$RANDOM
var=$[ $var % 13 ]
从0..12获取号码。
编辑:
如果你想产生从$x 到$y 的数字,你可以很容易地修改这个:
var=$[ $x + $var % ($y + 1 - $x) ]
【讨论】:
0 到 12 之间(包括):
echo $((RANDOM % 13))
编辑:请注意,此方法并不完全正确。因为 32768 不是 13 的倍数,所以生成 0 到 8 的几率(0.04%)略高于其余数字(9 到 12)。
这是应该提供平衡输出的shell函数:
randomNumber()
{
top=32768-$((32768%($1+1)))
while true; do
r=$RANDOM
[ r -lt $top ] && break
done
echo $((r%$1))
}
当然,如果范围的较高值超过 32767,则应该设计更好的东西。
【讨论】:
在 linux 上使用 shuf 的替代方法(或者确切地说是 coreutils):
var=$(shuf -i0-12 -n1)
【讨论】:
给你
echo $(( $RANDOM % 12 ))
我希望这会有所帮助。
【讨论】:
本文档包含一些使用此功能的示例,例如 RANGE 和 FLOOR,可能会有所帮助:http://tldp.org/LDP/abs/html/randomvar.html
【讨论】:
在 FreeBSD 和您可以使用的其他 BSD 上:
jot -r 3 0 12
这将创建从 0 到 12 的 3 随机数。
另一种选择,如果每个脚本只需要一个随机数,你可以这样做:
var=$(( $$ % 13 ))
这将使用脚本的 PID 作为种子,这应该是随机的。范围还是从 0 到 12。
【讨论】: