1

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 のわずかに苛立たしい制限ですか? アドバイスをいただければ幸いです。

4

2 に答える 2