Bisakah saya mengubah cara pilih opsi ditampilkan?

8

Saya bekerja dengan select dan case di bash. Saat ini saya memiliki sembilan opsi, yang membuat kisi 3x3 pilihan yang bagus, rapi, tetapi tampilannya seperti ini:

    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

Saya lebih suka jika ditampilkan dalam baris sebelum kolom:

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

Apakah ada cara untuk mencapai ini? Lebih disukai sesuatu yang mudah diatur dan tidak disetel dalam skrip, seperti opsi shell. Jika itu penting, opsi disimpan dalam array, dan direferensikan dalam blok kasus dengan indeks array.

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
pengguna67459
sumber

Jawaban:

7

Buat "pilih" Anda sendiri:

#!/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

Keluaran:

1) tampilkan semua elemen 2) tambahkan elemen 3) muat file             
4) tulis ke file 5) buat baris 6) hapus file            
7) hapus elemen 8) pilih file 9) keluar                  
#? 
Cyrus
sumber