Bashスクリプト:選択ループのオプション数を制限する方法は?

Bashスクリプト:選択ループのオプション数を制限する方法は?

選択ループを使用して配列要素をオプションとしてレンダリングすると、すべての要素が一度に表示されます。ユーザーに一度に25のオプションを提供する方法はありますか?

ベストアンサー1

私は以前bash配列で作業したことがないので、select一度に25項目を繰り返すv0.1メニューがあります。一度に項目数は次のように設定されます。どのくらい初めてループバックするには、ロジックを追加する必要があります。また、メニューの選択に興味深いことはありません。breakユーザーが実際のメニュー項目を選択するタイミングを知りたい場合があります。

興味深い部分は、開始インデックスと終了インデックスに基づいてCURRNUMS配列を補充し、ループに追加の「次の」エントリを含めることですselect

ALLNUMBERS=({30..90})
start=0
howmany=25
while :
do
  end=$((start + howmany - 1))
  CURRNUMS=
  for (( i = start; i < end ; i++ ))
  do
    cindex=$((i - start))
    CURRNUMS[$cindex]=${ALLNUMBERS[$i]}
  done
  echo Presenting a new set of menu items...
  select number in ${CURRNUMS[*]} next; do
    echo You picked $REPLY
    echo number is now: $number
    if [ $REPLY = "next" ] || [ $REPLY = $howmany ] ; then
      start=$end
      break;
    fi
  done
done

サンプル出力は次のとおりです。

Presenting a new set of menu items...
1) 30      5) 34     9) 38    13) 42    17) 46    21) 50    25) next
2) 31      6) 35    10) 39    14) 43    18) 47    22) 51
3) 32      7) 36    11) 40    15) 44    19) 48    23) 52
4) 33      8) 37    12) 41    16) 45    20) 49    24) 53
#? 2
You picked 2
number is now: 31
#? 25
You picked 25
number is now: next
Presenting a new set of menu items...
1) 54      5) 58     9) 62    13) 66    17) 70    21) 74    25) next
2) 55      6) 59    10) 63    14) 67    18) 71    22) 75
3) 56      7) 60    11) 64    15) 68    19) 72    23) 76
4) 57      8) 61    12) 65    16) 69    20) 73    24) 77
#? 3
You picked 3
number is now: 56
#? next
You picked next
number is now:
Presenting a new set of menu items...
1) 78      3) 80     5) 82     7) 84     9) 86    11) 88    13) 90
2) 79      4) 81     6) 83     8) 85    10) 87    12) 89    14) next
#? ^C

おすすめ記事