LoginSignup
0
2

More than 3 years have passed since last update.

bashで複数選択のメニューを作る

Posted at

検索してもあまり情報が出てこなかったので、自分用にメモ。

関数

multiple_select() {
  local PS3="$1(複数選択する場合は、半角スペースを開けてください)> "
  local items="$2 exit"
  local itemarray=($items)
  local itemlen=${#itemarray[@]}
  local regex='^[1-9][0-9]*$'
  local res=''

  select selection in $items; do
    for i in $REPLY; do
      if ! [[ $i =~ $regex && $i -le $itemlen ]]; then
        echo "入力値が不正です。" 1>&2
        return 1
      fi
      if [ $i -eq $itemlen ]; then
        echo ""
        return 0
      fi
      # 設定済みの場合は無視する
      if [[ $res == *"${itemarray[i-1]}"* ]]; then
        continue
      fi
      res+=" ${itemarray[i-1]}"
    done
    echo $res
    return 0
  done
}

使い方

my_favorite_fruits=`multiple_select \
  "好きな果物は何ですか?" \
  "りんご みかん いちご バナナ"` \
|| exit 1

出力

1) りんご
2) みかん
3) いちご
4) バナナ
5) exit
好きな果物は何ですか?(複数選択する場合は、半角スペースを開けてください)> 1 2 2 4 1 4 4
りんご みかん バナナ

1) りんご
2) みかん
3) いちご
4) バナナ
5) exit
好きな果物は何ですか?(複数選択する場合は、半角スペースを開けてください)> a
入力値が不正です。
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2