Tôi có thể thay đổi cách chọn tùy chọn được hiển thị không?


8

Tôi đang làm việc với select và case in bash. Tôi hiện có chín tùy chọn, tạo ra một lưới các tùy chọn 3x3 đẹp, gọn gàng, nhưng nó hiển thị như vậy:

    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

Tôi muốn nếu nó được hiển thị trong các hàng trước các cột:

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

Có cách nào để thực hiện điều này? Tốt nhất là một cái gì đó dễ đặt và bỏ đặt trong tập lệnh, như tùy chọn shell. Nếu có vấn đề, các tùy chọn được lưu trữ trong một mảng và được tham chiếu trong các khối trường hợp theo chỉ mục của mảng.

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

Câu trả lời:


7

Tạo "chọn" của riêng bạn:

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

Đầu ra:

1) hiển thị tất cả các yếu tố 2) thêm các yếu tố 3) tải tập tin             
4) ghi vào tệp 5) tạo dòng 6) xóa tệp            
7) xóa phần tử 8) chọn tệp 9) thoát                  
#? 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.