Ich brauche meine Eingabe mit /Return Enter Schlüssel vergleichen ...Bash Shell Scripting - Return-Taste/Enter-Taste
read -n1 key
if [ $key == "\n" ]
echo "@@@"
fi
Aber das funktioniert nicht .. Was ist mit diesem Code ist fehlerhaft
Ich brauche meine Eingabe mit /Return Enter Schlüssel vergleichen ...Bash Shell Scripting - Return-Taste/Enter-Taste
read -n1 key
if [ $key == "\n" ]
echo "@@@"
fi
Aber das funktioniert nicht .. Was ist mit diesem Code ist fehlerhaft
Mehrere Probleme mit dem gebuchten Code. Inline-Kommentare Detail ein, was zu beheben:
#!/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
liest eine Zeile vom Standardeingang bis zur neuen Zeile am Ende der Zeile. -n
gibt die maximale Anzahl an Zeichen an und erzwingt die Rückgabe von read
, wenn Sie diese Anzahl an Zeichen erreichen. Es wird jedoch immer noch früher beendet, wenn die Taste Return gedrückt wird. In diesem Fall gibt es eine leere Zeichenfolge zurück - alles bis auf Return Schlüssel.
Sie müssen mit der leeren Zeichenfolge vergleichen, um festzustellen, ob der Benutzer sofort gedrückt hat Zurück.
read -n1 KEY
if [[ "$KEY" == "" ]]
then
echo "@@@";
fi
Auch ist es gute Idee, leer $ IFS (interne Feldtrenn) zu definieren, bevor Vergleiche, denn sonst können Sie mit „“ und „\ am Ende n“ gleich.
So sollte der Code wie folgt aussehen:
# 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
#dies funktioniert nicht für mich, wenn die Verwendung von Loop-Druck coutdown IFS = Echo-e "Drücken Sie [ENTER] für Tastaturkonfiguration." für ((i = 10; i> 0; i--)); do printf "\ rStart in $ i Sekunden ..." lesen -n 1 -t 1 Taste if ["$ key" = $ '\ e']; dann echo Pause elif "Das ESC ist" [ "$ key" == ""], dann echo -en "\ n Raum gedrückt wird" Pause fi getan –
vielleicht ist das, was für die Inline-Syntax Sie sollten IFS = verwenden; Echo ... (mit Semikolon) – tsds
ich unten Code hinzufügen bin nur als Referenz, wenn jemand eine solche Lösung verwenden, die Countdown-Schleife wollen.
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
Sie vermissen "dann" in der Zeile zwischen "if" und "echo". Nicht das einzige Problem, aber eins – Phil