3つの数値(10、100、および1000)からランダムに選択された変数


19

3つの事前に決められた数から乱数を選ぶ変数を持つことは可能ですか?

サンプル:

var= 10 or 100 or 1000

1
私はUNIXでプログラミングしないので、コードを書くことはできませんが、別のアプローチがあります:val = left( "1000"、length = Random 2〜4)。3つの無関係な値を持つために、コードは同様になります。
センシイミラー

回答:


31

配列を使用して値を保持し、組み込み変数を使用して値の中から選択します$RANDOM。例えば、

x[0]=10     # One decade
x[1]=100    # One century
x[2]=1000   # One millennium

for ((i=1; i < 20; ++i)); do echo -n " ${x[$RANDOM%3]}"; done; echo
1000 10 10 10 10 100 10 100 100 10 10 100 100 100 10 1000 1000 1000 10

ランダム性の品質は可能な限り最高ではありません(/dev/urandomそのためにバイトを読み取ります)が、スクリプトとしては十分に優れているはずです。

注1:人々がコメントで見たように、配列要素を個別に初期化する代わりに、もちろん配列litteral:を使用できますx=(10 100 1000)

注2:配列内の要素数をハードコーディングする代わりに、によってradom要素を抽出できます${x[$RANDOM%${#x[@]}]}


5
+1この特定のケースでは、ツェッペリンの答えは賢明ですが、配列アプローチは非常に一般的です。
カミルマシオロウスキ

4
以下のように思えるx=(10 100 1000)のbashでリテラルから配列を作成し、これは、より読みやすく、より慣用だろう

1
@cat:読みやすさに関する意見はさまざまです。個々のアイテムを別々の行に配置するのが好きです。通常は、値を説明する末尾のコメントを付けます。
AlexP

@AlexPああ、私はそれが意図的なものだと思ったらコメントしないと思います。しかし十分に公正

1
@AlexP x[0]=10 # This sets the first value of x to ten. Ten is the number of fingers that humans have (excepting birth defects or mutilation). It is also the sum of 9 and 1, or product of 5 and 2. Ten is not prime. A traditional Christmas gift is ten lords a-leaping.そのような何か?
ニックT

30

bash(またはzshまたはksh93)を使用している場合は、次のようにできます。

echo "$((10**($RANDOM%3+1)))"

または

var=$((10**($RANDOM%3+1)))

varに割り当てる


:)。あなたがそれを見ると簡単ですが、私はしませんでした。ありがとう!!
エスペンラーセン


8
case $(( RANDOM % 3 )) in
    0)
        var=10
        ;;
    1)
        var=100
        ;;
    2)
        var=1000
        ;;
esac

5

少しわかりにくい方法を次に示します。

printf -v var '1%0*d' $(( RANDOM % 3 + 1 )) 0

これにより$var、必要に応じてランダムな値が割り当てられます。printf書式文字列である1%0Nd-これが原因0で印刷されるN先行ゼロ、N間隔でランダムな整数であろう[1,3]

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.