var=$RANDOM
创建随机数,但我如何指定一个介于 0 到 12 之间的范围?
问问题
15468 次
6 回答
12
如果你已经有了随机数,你可以说
var=$RANDOM
var=$[ $var % 13 ]
从中获取数字0..12
。
编辑:
如果你想从 to 产生数字$x
,$y
你可以很容易地修改这个:
var=$[ $x + $var % ($y + 1 - $x) ]
于 2011-05-13T13:34:44.630 回答
8
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,则应该设计更好的东西。
于 2011-05-13T13:37:46.357 回答
6
在 linux 上使用 shuf 的替代方法(或者确切地说是 coreutils):
var=$(shuf -i0-12 -n1)
于 2011-05-13T14:44:35.250 回答
3
干得好
echo $(( $RANDOM % 12 ))
我希望这有帮助。
于 2011-05-13T13:34:36.403 回答
1
本文档有一些使用此功能的示例,例如 RANGE 和 FLOOR,可能会有所帮助:http ://tldp.org/LDP/abs/html/randomvar.html
于 2011-05-13T13:35:18.613 回答
1
在 FreeBSD 和可能的其他 BSD 上,您可以使用:
jot -r 3 0 12
这将创建3
从 0 到 12 的随机数(含)。
另一种选择,如果每个脚本只需要一个随机数,你可以这样做:
var=$(( $$ % 13 ))
这将使用脚本的 PID 作为种子,这应该是随机的。范围再次从 0 到 12。
于 2014-10-14T05:10:17.610 回答