我需要在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。
提前致谢
答案 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"少数"细节留给读者练习。