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)))

割り当てるvar

答え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]

関連情報