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



我需要在bash中生成1981年到2012年(包括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。

提前感谢

$ 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问题。一些"细节"留给读者练习。

最新更新