
事前に決められた 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
を付けて印刷され、 は間隔 内のランダムな整数になります。N
N
[1,3]