read -n1
ainda lê uma linha, mas até um caractere.
Então, se você pressionar enter, você recebe uma linha vazia, então uma string vazia é armazenada na variável.
Para ler 1 caractere, use -N
:
read -N1 var
Posso usar read
para capturar o caractere \n
2
ou nova linha?
Defina a função de teste:
f() { read -rd '' -n1 -p "Enter a character: " char &&
printf "\nYou entered: %q\n" "$char"; }
Execute a função, pressione Enter :
$ f;
Enter a character:
You entered: ''
Hmmm. É uma string nula.
Como obtenho o resultado esperado:
$ f;
Enter a character:
You entered: $'2'
$
Eu quero que o mesmo método seja capaz de capturar ^D
ou
. read
4
Se %code% não conseguir, qual é o trabalho?
bash
builtin read
pode fazer isso:
read -rd $'read -rd $'%pre%' -p ... -n 1
printf '\nYou typed ASCII %02x\n' "'$REPLY"
' -p ... -n 1
printf '\nYou typed ASCII %02x\n' "'$REPLY"
(este trecho de código não funciona com caracteres multibyte)
Observe como eu não coloquei o que é lido na variável char
como você fez. Isso ocorre porque isso removeria os caracteres no IFS de char
. Com um IFS padrão, você não seria capaz de diferenciar entre espaço, tabulação e nova linha.