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
case
es algo equivalente pero no perfecto ya queYE
se aceptan declaraciones como .fuente
El estándar UNIX proporciona un código de ejemplo para esto usando la
locale
utilidad :El valor de 'yesexpr' en la
POSIX
configuració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
locale
conoce? 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
yn
como sí,y
(con un espacio inicial) como no, ywlkjzuhfod
como no, lo que puede no ser óptimo pero es coherente con las típicas indicaciones de shell: así esrm -i
,find -ok
y 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
0
si se ingresaY
o siy
se ingresa1
algo más. Se puede usar conif...fi
:O simplemente así:
fuente
-s
para tener una historia visual de lo que se escribió.Solo modifiqué @faif ans
Prueba
fuente