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