Como forçar o bash a iniciar no índice 0 com a saída de seleção?

2

Bem, até mesmo alguns usuários bash menos experientes saberiam sobre o fato de que bash arrays sempre começariam com o índice 0. No entanto, select sempre fará sua própria ação, como mostra o exemplo a seguir:

#!/bin/bash
choices=(NONE nyc la chicago little_rock miami)

select choice in ${choices[@]}; do
  [[ " ${choices[*]} " == *" $choice "* ]] && break
done
echo "Choice was: $choice ; first element is ${choices[0]}"

A saída é:

1) NONE
2) nyc
... etc. ...

MAS ${choices[0]} produzirá 'NONE' mesmo assim! Então eu sinto que de alguma forma deve haver uma maneira de forçar o select a começar com índice 0 , não com 1.

(Alguém deve questionar o sentido mais profundo disso: realmente existe, especialmente quando você tem que pular o processamento com freqüência (idealmente definido como '0' no menu) com mais de 9 opções e, por conveniência, você colocaria a opção menos usada como '10', então você pode ter que digitar apenas um dígito em quase todos os casos.)

    
por syntaxerror 15.11.2014 / 04:24

1 resposta

1

Não há opção para alterar a base do número do item exibido no menu. Você menciona na sua pergunta "... mesmo alguns usuários bash menos experientes saberiam (sobre) ... índice 0".

Sim, isso está correto, mas o menu select não foi criado para bash users (leia-se "programadores") - foi destinado a usuários finais ( pré GUI era)  quem normalmente não sabe (ou se importa) nada sobre bash. Estar confortável com uma lista baseada em zero é uma coisa do programador (daí sua preferência), mas definitivamente não é algo que um usuário final está acostumado, afinal.

    
por 21.07.2015 / 21:30