Apakah mungkin untuk memiliki variabel yang mengambil nomor acak dari tiga angka yang ditentukan sebelumnya?
Mencicipi:
var= 10 or 100 or 1000
Apakah mungkin untuk memiliki variabel yang mengambil nomor acak dari tiga angka yang ditentukan sebelumnya?
Mencicipi:
var= 10 or 100 or 1000
Jawaban:
Gunakan array untuk menyimpan nilai dan memilih di antara mereka menggunakan variabel bawaan $RANDOM
. Sebagai contoh,
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
Kualitas keacakan tidak akan menjadi yang terbaik (baca byte dari /dev/urandom
untuk itu), tetapi harus lebih dari cukup untuk sebuah skrip.
Catatan 1: Sebagai orang telah diamati di komentar, bukannya menginisialisasi elemen array secara individual satu kaleng saja menggunakan litteral berbagai: x=(10 100 1000)
.
Catatan 2: Alih-alih mengkode jumlah elemen dalam array, elemen radom dapat diekstraksi dengan ${x[$RANDOM%${#x[@]}]}
.
x=(10 100 1000)
membuat array dari literal di bash, ini akan lebih mudah dibaca dan lebih idiomatis
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.
sesuatu seperti itu?
Jika Anda menggunakan bash (atau zsh atau ksh93 ) Anda bisa melakukannya:
echo "$((10**($RANDOM%3+1)))"
atau
var=$((10**($RANDOM%3+1)))
untuk menetapkannya ke var
Anda juga dapat menggunakan shuf
utilitas GNU coreutils :
a=$(shuf -n1 -e 10 100 1000)
Menggunakan RANDOM
sesuai jawaban lainnya hampir pasti lebih cepat.
Inilah cara yang agak samar:
printf -v var '1%0*d' $(( RANDOM % 3 + 1 )) 0
Ini akan menetapkan nilai acak $var
sesuai kebutuhan. The printf
format string adalah 1%0Nd
- ini menyebabkan 0
yang akan dicetak dengan N
nol terkemuka, di mana N
akan menjadi integer acak dalam interval [1,3]
.