bash ターミナルで $RANDOM 関数を使用して、指定された範囲内で乱数を生成しようとしています。問題は、それが生成している数字がまったくランダムに見えないことです。私が使用しているスクリプトは次のとおりです。
RANDOM=$$;
a=$RANDOM
b=9; #Number of scripts in collection -1
c=`expr $a % $b `; #Random number between 0 and b
if (( c==0 ));
then
echo "script 1 (random = $a, mod = $c)";
elif (( c==1 ));
then
echo "stript 2 (random = $a, mod = $c)";
...
else
echo "error (random = $a, mod = $c)";
fi;
これを for in ループで実行すると、たとえば次のようになります。
script 8 (random = 17845, mod = 7)
script 8 (random = 18754, mod = 7)
script 8 (random = 19663, mod = 7)
script 7 (random = 20571, mod = 6)
script 7 (random = 21480, mod = 6)
script 6 (random = 22388, mod = 5)
script 6 (random = 23297, mod = 5)
script 6 (random = 24206, mod = 5)
script 5 (random = 25114, mod = 4)
script 5 (random = 26023, mod = 4)
これは明らかにランダムではありません。
$a を削除して実行してみました
c=`expr $RANDOM % $b`;
コードを別のバリエーションに変更する
c=`expr $a \* $b \/ 32767`;
しかし、これらは (当然のことながら) 同じ結果を返しました。私は何を間違っていますか?それとも、これは $RANDOM のわずかに苛立たしい制限ですか? アドバイスをいただければ幸いです。