如何在不使用shuf或sort -R的情况下在bash中生成两个限制之间的随机数

时间:2014-05-27 13:20:20

标签: bash random

我需要在bash中生成1981年到2012年(含)之间的随机数。我无法访问shuf或sort -R,我尝试过:

floor=1981
range=2012
while [ "$number" -le $floor ]; 
do 
number=$RANDOM; 
let "number %= range"; 
done

while [ "$number" -le $floor ]; 
do 
number=$(( ( RANDOM % 2012 )  + 1 )); 
done

然而,这些总会在1992年回归:

echo $number
1992

有没有人有任何其他建议。理想情况下,仅仅为了您的信息而且可能无法实现,我希望它能在1981年到2012年之间将每个数字返回到一个循环中。目前虽然我只需要知道如何在bash中生成两个限制之间的随机数,而不使用shuf或sort -R。

提前致谢

1 个答案:

答案 0 :(得分:3)

$ echo $(( (RANDOM % 32) + 1981 ))
1991
$ echo $(( (RANDOM % 32) + 1981 ))
2000
$ echo $(( (RANDOM % 32) + 1981 ))
1998

要只发射一次,你需要一个数组:

  declare -A emitted
  ${emitted[$number]:-false} || {
    emitted[$number]=true
    echo $number
  }

所以,如果第一个表达式不适合您,则会出现BASH问题。 A"少数"细节留给读者练习。