目前我做这样的事情来将变量设置为数组中的随机项:
array=("foo" "bar" "baz")
var=${array[$RANDOM % ${#array[@]} ]}
如果我想设置$var
为这些值之一,但指定变量将分别设置为每个项目的值的机会,我该怎么办?假设我想要 73.3% 的机会foo
、26.6% 的机会bar
和 0.1% 的机会baz
。
目前我做这样的事情来将变量设置为数组中的随机项:
array=("foo" "bar" "baz")
var=${array[$RANDOM % ${#array[@]} ]}
如果我想设置$var
为这些值之一,但指定变量将分别设置为每个项目的值的机会,我该怎么办?假设我想要 73.3% 的机会foo
、26.6% 的机会bar
和 0.1% 的机会baz
。
一种方法:设置一个并行数组,对应的百分比几率;下面,我将它们缩放到 1000。然后,选择 1 到 1000 之间的随机数并遍历数组,直到你用完机会:
shell 不能做浮点运算,但如果我们只是移动小数点,我们可以使用
$RANDOM
和整数数学:这样做的好处是不必将数组增加到 1000 个条目或不需要任何
for
循环。