Могу ли я изменить способ отображения параметров выбора?

Я работаю с select и case в bash. В настоящее время у меня есть девять опций, которые делают приятную, аккуратную сетку 3×3, но она выглядит так:

1) show all elements 4) write to file 7) clear elements 2) add elements 5) generate lines 8) choose file 3) load file 6) clear file 9) exit 

Я бы предпочел, чтобы он отображался в строках перед столбцами:

 1) show all elements 2) add elements 3) load file 4) write to file 5) generate lines 6) clear file 7) clear elements 8) choose file 9) exit 

Есть ли способ сделать это? Предпочтительно, что-то легко установить и удалить в сценарии, например, в оболочке. Если это имеет значение, параметры сохраняются в массиве и упоминаются в блоках case по индексу массива.

 OPTIONS=("show all elements" "add elements" "load file" "write to file" "generate lines" "clear file" "clear elements" "choose file" "exit") ... select opt in "${OPTIONS[@]}" do case $opt in "${OPTIONS[0]}") ... "${OPTIONS[8]}") echo "Bye bye!" exit 0 break ;; *) echo "Please enter a valid option." esac done 

One Solution collect form web for “Могу ли я изменить способ отображения параметров выбора?”

Создайте свой собственный «select»:

 #!/bin/bash options=("show all elements" "add elements" "load file" "write to file" "generate lines" "clear file" "clear elements" "choose file" "exit") width=25 cols=3 for ((i=0;i<${#options[@]};i++)); do string="$(($i+1))) ${options[$i]}" printf "%s" "$string" printf "%$(($width-${#string}))s" " " [[ $(((i+1)%$cols)) -eq 0 ]] && echo done while true; do echo read -p '#? ' opt case $opt in 1) echo "${options[$opt-1]}" ;; 2) echo "${options[$opt-1]}" ;; 9) echo "Bye bye!" break ;; esac done 

Вывод:

 1) показать все элементы 2) добавить элементы 3) загрузить файл             
 4) записать в файл 5) создать строки 6) очистить файл            
 7) очистить элементы 8) выбрать файл 9) выйти                  
 #? 
  • Переменные доступа, установленные внутри подстановок
  • Ошибка фиксации сигнала 13 (SIGPIPE) для поиска и grep-конвейера
  • Вопросы о функциях whiptail и bash
  • awk + как печатать каждую секцию строки (IP) после первого имени хоста
  • Отклоните SSH-соединения от стран, не включенных в список, используя hosts.allow / hosts.deny в CentOS
  • Bash не равно сравнение строк
  • Как настроить функцию масштабирования xrandr для переключения на следующее или предыдущее разрешение в предопределенном списке?
  • Как суммировать вывод двух команд и сохранить их в файле?
  • Как передать вывод скрипта команде ls без разделения данных?
  • Можно ли выполнить скрипт, который принимает пользовательский ввод, а затем выполнить другой скрипт
  • Как можно вычесть 2 поплавки, которые были извлечены из 2 других файлов с помощью BASH
  • Interesting Posts

    Как удалить все, кроме последних 10 файлов

    Проблема с запуском cd с sudo в качестве другого пользователя

    Скрипты многотомных (GNU) `tar` с заранее определенным количеством томов

    Компиляция кода C ++ 11 на старых машинах

    Невозможно изменить файлы в моем домашнем каталоге

    Bash добавить конечные пробелы, чтобы оправдать строку

    Переслать многоадресную рассылку между двумя сегментами локальной сети (Chromecast)

    получить исходный код ядра

    Перечислить все файлы в каталоге рекурсивно, но исключить сами каталоги

    Как я могу отслеживать, кто SSH's в моей Linux-машине?

    Настроить bash для выполнения команды с последним аргументом, если аргумент не был предоставлен

    Как создать пользователя с ограниченным использованием ОЗУ?

    Установка LUKS из командной строки

    rsyslog слишком сильно отбрасывает сообщения

    Проверка вашего интернет-соединения с помощью speedtest-cli и просмотра

    Linux и Unix - лучшая ОС в мире.