.png)
Возможно ли иметь переменную, которая выбирает случайное число из трех заранее определенных чисел?
Образец:
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 coreutilsshuf
полезность:
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]
.