O teste de usabilidade de um script de shell que escrevi descobriu que as pessoas tinham expectativas diferentes sobre como responder a uma pergunta que esperava 'sim' como resposta. Veja variações no exemplo de código abaixo.
Certamente deve haver uma maneira melhor do que eu inventei? Qual é a sua forma legível e mais curta sobre isso?
read -p 'Answer this question with yes: ' answer
if [ "$answer" = 'Y'
-o "$answer" = 'YES'
-o "$answer" = 'Yes'
-o "$answer" = 'y'
-o "$answer" = 'yes'
-o some-alternate-condition ]; then
echo 'Surely this can be written better?'
fi
bash
shell-script
prompt
Aeyoun
fonte
fonte
Respostas:
Usar a
case
é um tanto equivalente, mas não perfeito, pois declarações comoYE
são aceitas.fonte
O padrão UNIX fornece um exemplo de código para isso usando o
locale
utilitário :O valor para 'yesexpr' no código do
POSIX
idioma (e nos idiomas inglês em sistemas reais) é"^[yY]"
. Deve ser interpretado como uma expressão regular estendida. Veja também noexpr.fonte
locale
conhece? A página de manual na minha caixa do Mac OS 10.5 parece não ter.locale -k LC_MESSAGES
(e para o outro LC_whatever), ou veja aqui os definidos pelo padrão. @ Daniel Qual fonte, além da página do utilitário de localidade que eu vinculei?Permanecendo no bash (ou em qualquer outro shell, se você exibir o prompt independentemente):
Este aceita respostas como
yn
como Sim,y
(com um espaço inicial) como não, ewlkjzuhfod
como não, o que pode não ser o ideal, mas é consistente com prompts de shell típicos: é assimrm -i
,find -ok
e outros fazê-lo.Isso evita toda a questão da internacionalização: em outros idiomas, você precisaria traduzir as respostas esperadas. Não há método shell padrão então; você pode ativar a caixa de diálogo , mas seu script exigirá que seja instalado (está disponível em muitas distribuições, mas nem sempre é instalado por padrão).
fonte
Eu costumo usar uma função simples:
A função apenas retorna
0
seY
ouy
é inserida e1
se qualquer outra coisa é inserida. Pode ser usado comif...fi
:Ou assim:
fonte
-s
para ter uma história visual do que foi digitado.Apenas re-modificado @faif ans
Teste
fonte