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 . read4
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.