Eu nunca usei select
antes, e também nunca usei bash arrays antes, portanto, aqui está a v0.1 de um menu que percorre 25 itens por vez. O número de itens por vez é configurado como howmany . Você precisaria adicionar lógica para voltar ao início. Também não faz nada de interessante com sua seleção de menu. Você pode querer break
out quando o usuário escolhe um item de menu real.
As partes interessantes estão preenchendo o array CURRNUMS com base nos índices inicial e final e incluindo um item extra "próximo" no loop 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
Veja o exemplo de saída:
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