7

var=$RANDOM乱数を作成しますが、たとえば0から12のような範囲を指定するにはどうすればよいですか?

4

6 に答える 6

12

すでに乱数を持っている場合は、次のように言うことができます

var=$RANDOM
var=$[ $var % 13 ]

から数値を取得します0..12

編集:$xからまでの 数値を生成する場合は$y、これを簡単に変更できます。

var=$[ $x + $var % ($y + 1 - $x) ]
于 2011-05-13T13:34:44.630 に答える
8

0から12の間(含まれています):

echo $((RANDOM % 13))

編集:この方法は厳密には正しくないことに注意してください。32768は13の倍数ではないため、0から8が生成される確率は、残りの数値(9から12)よりもわずかに高くなります(0.04%)。

バランスの取れた出力を提供するシェル関数は次のとおりです。

randomNumber()
{
  top=32768-$((32768%($1+1)))
  while true; do
    r=$RANDOM
    [ r -lt $top ] && break
  done
  echo $((r%$1))
}

もちろん、範囲のより高い値が32767を超える場合は、より良いものを設計する必要があります。

于 2011-05-13T13:37:46.357 に答える
6

Linux(正確にはcoreutils)で利用可能なshufを使用する代替手段:

var=$(shuf -i0-12 -n1)
于 2011-05-13T14:44:35.250 に答える
3

どうぞ

echo $(( $RANDOM % 12 ))

これがお役に立てば幸いです。

于 2011-05-13T13:34:36.403 に答える
1

このドキュメントには、RANGEやFLOORなどの使用例がいくつかあります。http://tldp.org/LDP/abs/html/randomvar.html

于 2011-05-13T13:35:18.613 に答える
1

FreeBSDおよびおそらく他のBSDでは、以下を使用できます。

jot -r 3 0 12

3これにより、0から12までの乱数が作成されます。

別のオプションとして、スクリプトごとに1つの乱数のみが必要な場合は、次のことができます。

var=$(( $$ % 13 ))

これにより、スクリプトのPIDがシードとして使用されますが、これはほとんどランダムである必要があります。範囲も0から12になります。

于 2014-10-14T05:10:17.610 に答える