#bash #shell #variables #random #random-sample
#bash #оболочка #переменные #Случайный
Вопрос:
var=$RANDOM
создает случайные числа, но как я могу указать диапазон, например, от 0 до 12?
Ответ №1:
Если у вас уже есть свой случайный номер, вы можете сказать
var=$RANDOM
var=$[ $var % 13 ]
чтобы получить числа из 0..12
.
Редактировать: Если вы хотите создавать числа от $x
до $y
, вы можете легко изменить это:
var=$[ $x $var % ($y 1 - $x) ]
Ответ №2:
От 0 до 12 (включено):
echo $((RANDOM % 13))
Редактировать: Обратите внимание, что этот метод не является строго правильным. Поскольку 32768 не кратно 13, вероятность того, что будут сгенерированы числа от 0 до 8, немного выше (0,04%), чем у остальных чисел (от 9 до 12).
Вот функция оболочки, которая должна выдавать сбалансированный вывод:
randomNumber()
{
top=32768-$((32768%($1 1)))
while true; do
r=$RANDOM
[ r -lt $top ] amp;amp; break
done
echo $((r%$1))
}
Конечно, следует разработать что-то лучшее, если большее значение диапазона превышает 32767.
Ответ №3:
Альтернатива с использованием shuf, доступная в Linux (или, если быть точным, coreutils):
var=$(shuf -i0-12 -n1)
Комментарии:
1. Meh. Тогда ваш скрипт не переносим.
Ответ №4:
Вот так
echo $(( $RANDOM % 12 ))
Я надеюсь, что это поможет.
Комментарии:
1. Исправление: $ (( $RANDOM % 13 ))
2. да, согласен, спасибо. Я был так взволнован, что сначала смог ответить на простой вопрос, я недостаточно тщательно тестировал! Спасибо за 2 голоса «за» (кто бы вы ни были) 😉
3. Обратите внимание, что внутренний $ необязателен, поскольку найденные там нечисловые строки могут быть только именами переменных.
Ответ №5:
В этом документе есть несколько примеров использования подобного ДИАПАЗОНА и нижнего уровня, которые могут быть полезны: http://tldp.org/LDP/abs/html/randomvar.html
Ответ №6:
Во FreeBSD и, возможно, других BSD вы можете использовать:
jot -r 3 0 12
Это создаст 3
случайные числа от 0 до 12 включительно.
Другой вариант, если вам нужно только одно случайное число для каждого скрипта, вы можете сделать:
var=$(( $$ % 13 ))
В качестве начального значения будет использоваться PID скрипта, который должен быть в основном случайным. Диапазон снова будет от 0 до 12.
Комментарии:
1. В Mac OS X тоже есть jot. Но не Linux, так что это не переносимо.