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

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

所定の3つの数字の中から乱数を選択する変数を持つことはできますか?

サンプル:

var= 10 or 100 or 1000

答え1

配列を使用して値を保持し、組み込み変数を使用してその中から選択します$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:x=(10 100 1000)人々がコメントで観察したように、配列要素を個別に初期化する代わりに配列リテラルを使用することはもちろん可能です。

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

答え2

使用する場合強く打つ(または扱いにくいまたはクッシュ 93) 次のようにできます。

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

または

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

それを割り当てる変わりやすい

答え3

GNU coreutilsも使用できます。shuf便利:

a=$(shuf -n1 -e 10 100 1000)

RANDOMしかし、他の答えに従うことはほぼ確実に高速です。

答え4

これはやや不思議な方法です。

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

$var必要に応じて任意の値が割り当てられます。書式printf文字列は次のとおりです。1%0Nd- これにより、前にゼロが0表示され、間隔にランダムな整数が表示されます。NN[1,3]

関連情報