Переменная, выбранная случайным образом из трех чисел (10, 100 и 1000)

Переменная, выбранная случайным образом из трех чисел (10, 100 и 1000)

Возможно ли иметь переменную, которая выбирает случайное число из трех заранее определенных чисел?

Образец:

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].

Связанный контент