Las pruebas de usabilidad de un script de shell que escribí descubrieron que las personas tenían diferentes expectativas sobre cómo responder una pregunta que esperaba un "sí" como respuesta. Ver variaciones en el siguiente código de ejemplo.
¿Seguramente debe haber una mejor manera de lo que se me ocurrió? ¿Cuál es su forma legible y más corta de esto?
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
fuente
fuente

Respuestas:
Usar a
casees algo equivalente pero no perfecto ya queYEse aceptan declaraciones como .fuente
El estándar UNIX proporciona un código de ejemplo para esto usando la
localeutilidad :El valor de 'yesexpr' en la
POSIXconfiguración regional (y en configuraciones regionales en inglés en sistemas reales) es"^[yY]". Debe interpretarse como una expresión regular extendida. Ver también noexpr.fuente
localeconoce? La página de manual en mi cuadro de Mac OS 10.5 no parece tenerlos.locale -k LC_MESSAGES(y para el otro LC_whatever), o vea aquí los definidos por el estándar. @Daniel, ¿qué fuente aparte de la página de la utilidad de configuración regional que he vinculado?Mantenerse en bash (o cualquier otro shell si muestra el mensaje de forma independiente):
Esto acepta respuestas
yncomo sí,y(con un espacio inicial) como no, ywlkjzuhfodcomo no, lo que puede no ser óptimo pero es coherente con las típicas indicaciones de shell: así esrm -i,find -oky otros lo hacen.Esto evita todo el problema de la internacionalización: en otros idiomas, necesitaría traducir las respuestas esperadas. No hay un método de shell estándar entonces; puede pasar al diálogo , pero luego su script requerirá que esté instalado (está disponible en muchas distribuciones pero no siempre está instalado de manera predeterminada).
fuente
Usualmente uso una función simple:
La función solo regresa
0si se ingresaYo siyse ingresa1algo más. Se puede usar conif...fi:O simplemente así:
fuente
-spara tener una historia visual de lo que se escribió.Solo modifiqué @faif ans
Prueba
fuente