Похоже, что новое обновление устраняет эту проблему. Запуск apt update и apt full-upgrade должен устранить его.
Я бы сделал это следующим образом:
menu() {
clear
echo "Available options:"
for i in ${!options[@]}; do
printf "%3d%s) %s\n" $((i+1)) "${choices[i]:- }" "${options[i]}"
done
}
prompt="Check an option (again to uncheck, ENTER when done): "
while menu && read -rp "$prompt" num && [[ "$num" ]]; do
[[ "$num" =~ "-" ]] && num=$(seq $(sed -E 's/(\d*)-(\d*)/\1 \2/' <<<"$num"))
for i in $num; do
((i--))
[[ "${choices[i]}" ]] && choices[i]="" || choices[i]="*"
done
done
Этот тест, если $num содержит дефис и, если необходимо, строит диапазон, затем просто перебирает содержимое $num, чтобы пользователи может дать сразу несколько вариантов, например 1 2 4 или 1-4 (но не их комбинация!). Он также clear является терминалом каждый раз перед тем, как печатается меню.
Я бы сделал это следующим образом:
menu() {
clear
echo "Available options:"
for i in ${!options[@]}; do
printf "%3d%s) %s\n" $((i+1)) "${choices[i]:- }" "${options[i]}"
done
}
prompt="Check an option (again to uncheck, ENTER when done): "
while menu && read -rp "$prompt" num && [[ "$num" ]]; do
[[ "$num" =~ "-" ]] && num=$(seq $(sed -E 's/(\d*)-(\d*)/\1 \2/' <<<"$num"))
for i in $num; do
((i--))
[[ "${choices[i]}" ]] && choices[i]="" || choices[i]="*"
done
done
Этот тест, если $num содержит дефис и, если необходимо, строит диапазон, затем просто перебирает содержимое $num, чтобы пользователи может дать сразу несколько вариантов, например 1 2 4 или 1-4 (но не их комбинация!). Он также clear является терминалом каждый раз перед тем, как печатается меню.
Я бы сделал это следующим образом:
menu() {
clear
echo "Available options:"
for i in ${!options[@]}; do
printf "%3d%s) %s\n" $((i+1)) "${choices[i]:- }" "${options[i]}"
done
}
prompt="Check an option (again to uncheck, ENTER when done): "
while menu && read -rp "$prompt" num && [[ "$num" ]]; do
[[ "$num" =~ "-" ]] && num=$(seq $(sed -E 's/(\d*)-(\d*)/\1 \2/' <<<"$num"))
for i in $num; do
((i--))
[[ "${choices[i]}" ]] && choices[i]="" || choices[i]="*"
done
done
Этот тест, если $num содержит дефис и, если необходимо, строит диапазон, затем просто перебирает содержимое $num, чтобы пользователи может дать сразу несколько вариантов, например 1 2 4 или 1-4 (но не их комбинация!). Он также clear является терминалом каждый раз перед тем, как печатается меню.