Чи можливо мати змінну, яка вибирає випадкове число з трьох попередньо прийнятих чисел?
Зразок:
var= 10 or 100 or 1000
Чи можливо мати змінну, яка вибирає випадкове число з трьох попередньо прийнятих чисел?
Зразок:
var= 10 or 100 or 1000
Відповіді:
Використовуйте масив для утримання значень та вибору серед них за допомогою вбудованої змінної $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: Як люди спостерігали в коментарях, замість того , щоб ініціалізувати елементи масиву по окремо , звичайно , можна використовувати litteral масиву: x=(10 100 1000)
.
Примітка 2: Замість жорсткого кодування кількості елементів у масиві, радіо елемент може бути вилучений за допомогою ${x[$RANDOM%${#x[@]}]}
.
x=(10 100 1000)
створює масив з буквального в баші, це було б читабельніше та ідіоматичніше
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.
щось подібне?
Якщо ви використовуєте bash (або zsh або ksh93 ), ви можете просто зробити:
echo "$((10**($RANDOM%3+1)))"
або
var=$((10**($RANDOM%3+1)))
призначити його вар
Ви також можете використовувати shuf
утиліту GNU coreutils :
a=$(shuf -n1 -e 10 100 1000)
Використання RANDOM
відповідно до іншими відповідями майже напевно швидше , хоча.
Ось трохи кричущий спосіб:
printf -v var '1%0*d' $(( RANDOM % 3 + 1 )) 0
Це призначить випадковому значенню $var
необхідне. Рядок printf
формату є 1%0Nd
- це призводить 0
до друку з N
провідними нулями, де N
в інтервалі буде випадкове ціле число [1,3]
.