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

Я работаю с 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 

Создайте свой собственный «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) выйти                  
 #?