Les tests d'utilisabilité d'un script shell que j'ai écrit ont révélé que les gens avaient des attentes différentes sur la façon de répondre à une question qui attendait «oui» comme réponse. Voir les variations dans l'exemple de code ci-dessous.
Il doit sûrement y avoir un meilleur moyen que ce que j'ai trouvé? Quelle est votre forme lisible et plus courte à ce sujet?
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
la source
la source
Réponses:
L'utilisation de a
case
est quelque peu équivalente mais pas parfaite car les déclarations commeYE
sont acceptées.la source
La norme UNIX fournit un exemple de code pour cela à l'aide de l'
locale
utilitaire :La valeur de 'yesexpr' dans les
POSIX
paramètres régionaux (et sur les paramètres régionaux anglais sur les systèmes réels) est"^[yY]"
. Il doit être interprété comme une expression régulière étendue. Voir aussi noexpr.la source
locale
connus? La page de manuel sur ma boîte Mac OS 10.5 ne semble pas en avoir.locale -k LC_MESSAGES
(et pour les autres LC_deux que ce soit), ou voir ici pour ceux définis par la norme. @Daniel quelle source autre que la page d'utilité locale que j'ai liée?Rester dans bash (ou tout autre shell si vous affichez l'invite indépendamment):
Cela accepte les réponses comme
yn
oui,y
(avec un espace initial) comme non etwlkjzuhfod
comme non, ce qui n'est peut-être pas optimal mais est cohérent avec les invites de shell typiques: c'est comme çarm -i
,find -ok
et d'autres le font.Cela évite toute la question de l'internationalisation: dans d'autres langues, il faudrait traduire les réponses attendues. Il n'y a donc pas de méthode shell standard; vous pouvez passer à la boîte de dialogue , mais votre script nécessitera son installation (il est disponible dans de nombreuses distributions mais pas toujours installé par défaut).
la source
J'utilise généralement une fonction simple:
La fonction retourne simplement
0
siY
ouy
est entré et1
si autre chose est entré. Il peut être utilisé avecif...fi
:Ou tout simplement comme ceci:
la source
-s
pour avoir un historique visuel de ce qui a été tapé.Juste re-modifié @faif ans
Tester
la source