Выберите случайный элемент из массива
Я создаю бота в Shell Script:
# Array with expressions
expressions=("Ploink Poink" "I Need Oil" "Some Bytes are Missing!" "Poink Poink" "Piiiip Beeeep!!" "Hello" "Whoops! I'm out of memmory!")
# Seed random generator
RANDOM=$$$(date +%s)
# Loop loop loop loop loop loop ...
while [ 1 ]
do
# Get random expression...
selectedexpression=${expressions[$RANDOM % ${#RANDOM[*]}]}
# Write to Shell
echo $selectedexpression
# Wait an half hour
sleep 1 # It one second for debugging, dear SOers
done
Я хочу, чтобы он печатал случайный элемент из expressions
каждую секунду. Я пробовал это, но он не работает. Он печатает только первый (Ploink Poink) каждый раз. Может кто-нибудь мне помочь?
Благодаря
Ответы
Ответ 1
Измените строку, в которой вы определяете selectedexpression
выражение
selectedexpression=${expressions[$RANDOM % ${#expressions[@]} ]
}
Вы хотите, чтобы ваш индекс в expression
был случайным числом от 0 до длины массива expression
. Это сделает это.
Ответ 2
arr[0]="Ploink Poink"
arr[1]="I Need Oil"
arr[2]="Some Bytes are Missing!"
arr[3]="Poink Poink"
arr[4]="Piiiip Beeeep!!"
arr[5]="Hello"
arr[6]="Whoops! I'm out of memmory!"
rand=$[$RANDOM % ${#arr[@]}]
echo $(date)
echo ${arr[$rand]}
Ответ 3
Здесь другое решение, которое может быть немного более случайным, чем решение Джейкоба Мэттисона (трудно сказать из jot
manpages):
declare -a expressions=('Ploink' 'I Need Oil' 'Some Bytes are Missing' 'Poink Poink' 'Piiiip Beeeep' 'Hello' 'Whoops I am out of memory')
index=$( jot -r 1 0 $((${#expressions[@]} - 1)) )
selected_expression=${expressions[index]}