ho bisogno di confrontare il mio ingresso con Inserisci/ritorno chiave ...Bash Shell Scripting - chiave di ritornare/Enter
read -n1 key
if [ $key == "\n" ]
echo "@@@"
fi
Ma questo non funziona .. Cosa c'è di sbagliato con questo codice
ho bisogno di confrontare il mio ingresso con Inserisci/ritorno chiave ...Bash Shell Scripting - chiave di ritornare/Enter
read -n1 key
if [ $key == "\n" ]
echo "@@@"
fi
Ma questo non funziona .. Cosa c'è di sbagliato con questo codice
Diversi problemi con il codice pubblicato. commenti in linea dettaglio cosa sistemare:
#!/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
legge una riga dall'input standard, fino a non includere la nuova riga alla fine della riga. -n
specifica il numero massimo di caratteri, forzando read
a tornare presto se si raggiunge quel numero di caratteri. Tuttavia, terminerà ancora prima quando viene premuto il tasto Return. In questo caso, restituisce una stringa vuota - tutto fino a ma non incluso il Restituisce la chiave.
È necessario confrontare la stringa vuota per stabilire se l'utente ha immediatamente premuto Restituisce.
read -n1 KEY
if [[ "$KEY" == "" ]]
then
echo "@@@";
fi
Inoltre è opportuno definire $ IFS vuoti (separatore di campo interno) prima di fare paragoni, perché altrimenti si può finire con "" e "\ n" parità di condizioni.
Quindi il codice dovrebbe essere simile a questo:
# 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
# non funziona per me se si utilizza il ciclo di stampa coutdown IFS = echo -e "Premere [INVIO] per Configurazione tastiera." per ((i = 10; i> 0; i--)); do printf "\ r Avvio in $ i secondi ..." leggi -n 1 -t 1 chiave se ["$ chiave" = $ '\ e']; poi echo "Questo è ESC" pausa elif [ "chiave di $" == ""], poi echo -e "viene premuto spazio \ n" pausa fi fatto –
forse la cosa è che per la sintassi in linea dovresti usare IFS =; echo ... (con punto e virgola) – tsds
Sto aggiungendo il codice qui sotto appena per riferimento, se qualcuno vorrà utilizzare tale soluzione contenente ciclo conto alla rovescia.
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
Manca "quindi" sulla linea tra "se" ed "echo". Non è l'unico problema, ma uno di questi è il – Phil