bash: read: como capturar o caractere '\ n' (nova linha)?

4

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?

    
por Tom Hale 01.08.2017 / 17:06

2 respostas

2

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
    
por 01.08.2017 / 17:25
2

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.

    
por 01.08.2017 / 17:24

Tags