Necesito comparar mi entrada con Introduzca/Volver clave ...de Bash Scripting - clave volver/Enter
read -n1 key
if [ $key == "\n" ]
echo "@@@"
fi
Pero esto no está funcionando .. Lo que está mal con este código
Necesito comparar mi entrada con Introduzca/Volver clave ...de Bash Scripting - clave volver/Enter
read -n1 key
if [ $key == "\n" ]
echo "@@@"
fi
Pero esto no está funcionando .. Lo que está mal con este código
Varios problemas con el código publicado. Los comentarios en línea detalle qué se debe corregir:
#!/bin/bash
# ^^ Bash, not sh, must be used for read options
read -s -n 1 key # -s: do not echo input character. -n 1: read only 1 character (separate with space)
# double brackets to test, single equals sign, empty string for just 'enter' in this case...
# if [[ ... ]] is followed by semicolon and 'then' keyword
if [[ $key = "" ]]; then
echo 'You pressed enter!'
else
echo "You pressed '$key'"
fi
read
lee una línea desde la entrada estándar, hasta pero sin incluir la nueva línea al final de la línea. -n
especifica el número máximo de caracteres, forzando read
a regresar temprano si alcanza esa cantidad de caracteres. Sin embargo, aún finalizará antes, cuando se presione la tecla Volver. En este caso, devuelve una cadena vacía: todo hasta la clave Devolver pero sin incluirla.
Tiene que comparar con la cadena vacía para saber si el usuario presiona de inmediato Devuelve.
read -n1 KEY
if [[ "$KEY" == "" ]]
then
echo "@@@";
fi
También es buena idea para definir IFS $ vacías (separador de campo interno) antes de hacer comparaciones, porque de lo contrario puede terminar con "" y "\ n" en igualdad de condiciones.
Así que el código debería tener este aspecto:
# for distinguishing " ", "\t" from "\n"
IFS=
read -n 1 key
if [ "$key" = "" ]; then
echo "This was really Enter, not space, tab or something else"
fi
#esto no funciona para mí si se usa la operación de impresión en bucle IFS = echo -e "Presione [ENTER] para la configuración del teclado." para ((i = 10; i> 0; i--)); do printf "\ rInicio en $ i segundos ..." lea -n 1 -t 1 clave if ["$ key" = $ '\ e']; entonces echo "Este es ESC" ruptura elif [ "$ tecla" == ""]; a continuación, echo -e "se pulsa el espacio \ n" ruptura fi hecho –
tal vez la cosa es que la sintaxis de línea deberías usar IFS =; echo ... (con punto y coma) – tsds
estoy añadiendo a continuación código sólo para referencia si alguien va a querer utilizar dicha solución que contiene bucle de cuenta atrás.
IFS=''
echo -e "Press [ENTER] to start Configuration..."
for ((i=10; i>0; i--)); do
printf "\rStarting in $i seconds..."
read -s -N 1 -t 1 key
if [ "$key" = $'\e' ]; then
echo -e "\n [ESC] Pressed"
break
elif [ "$key" == $'\x0a' ] ;then
echo -e "\n [Enter] Pressed"
break
fi
done
Falta "entonces" en la línea entre "si" y "eco". No es el único problema, pero uno – Phil