Qual é o significado de read -r?

21

para entender outra resposta:

find / -type d -print0 | while read -r -d ''; do ls -ltr "$dir" | sed '$!d'

o primeiro passo é entender o uso da opção -r do comando read.

Primeiro, pensei, seria suficiente simplesmente executar

man read

para pesquisar o significado da opção -r, mas percebi que a página do manual não contém nenhuma explicação para a opção, então procurei no Google por obter alguns exemplos read -t, read -p, mas não read -r.

Abdul Al Hazred
fonte
Você está dizendo que não há página de manual para leitura? Se eu digitar man read, recebo uma longa lista de comandos integrados do Bash. Eu pesquisei usando '/ read' Eu coloquei o que vi aqui pastebin.com/raw.php?i=tZ1uUXrG
user610209 27/03/2015
1
É um shell construído em (pelo menos no bash) - try help readorman bash
steeldriver
Com relação à sua pergunta sobre o título, leia unix.stackexchange.com/questions/18886/…
Gilles 'SO- stop
READ(1P)existe para mim ...
jasonwryan 27/03

Respostas:

27

Não existe um readcomando independente : em vez disso, é um shell interno e, como tal, está documentado na página de manual para bash:

read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p
prompt] [-t timeout] [-u fd] [name ...]
[...]
       -r     Backslash does not act as an escape character.  The back‐
              slash is considered to be part of the line.  In  particu‐
              lar,  a  backslash-newline pair may not be used as a line
              continuation.

Portanto, para resumir, readnormalmente permite que linhas longas sejam quebradas usando um caractere de barra invertida à direita e normalmente reconstrói essas linhas. Esse comportamento um pouco surpreendente pode ser desativado usando -r.

dhag
fonte
10
Uma demo:str="a\bc"; read x <<< "$str"; read -r y <<< "$str"; echo "$x"; echo "$y"
glenn jackman 27/03
@glennjackman Isso é ótimo, é ainda mais impressionante se você digitar str="a` and then hit Enter before pasting in the rest of the command starting with b`.
ErikE
1

A -ropção impede que as fugas de barra invertida sejam interpretadas . Aqui está um exemplo:

Suponha que exista um arquivo com este conteúdo:

ngRTM6hNqgziZcqCcEJN7bHAP9a1GeMs\
Ni3EAX1qvogWpRIPE3oagJL6nwl\QQW9y
bjJHyaVBrUcyZOY5U4h9QHnpEPqg\\\\\\\\\Q9Fk
iNOvAyBTAcN5n1uwR4GvRfAGUbPWiXax\n
cqGPPStH3gaWolrfVAlMtoWiSuLa7GzQ\n\n\n
EnO04N1nEkpWbfXRxrtYNqCZDpF\trQIXS
$ while read line; do echo $line; done < tempfile
ngRTM6hNqgziZcqCcEJN7bHAP9a1GeMsNi3EAX1qvogWpRIPE3oagJL6nwlQQW9y
bjJHyaVBrUcyZOY5U4h9QHnpEPqg\\\\Q9Fk
iNOvAyBTAcN5n1uwR4GvRfAGUbPWiXaxn
cqGPPStH3gaWolrfVAlMtoWiSuLa7GzQnnn
EnO04N1nEkpWbfXRxrtYNqCZDpFtrQIXS
$ while read -r line; do echo $line; done < tempfile
ngRTM6hNqgziZcqCcEJN7bHAP9a1GeMs\
Ni3EAX1qvogWpRIPE3oagJL6nwl\QQW9y
bjJHyaVBrUcyZOY5U4h9QHnpEPqg\\\\\\\\\Q9Fk
iNOvAyBTAcN5n1uwR4GvRfAGUbPWiXax\n
cqGPPStH3gaWolrfVAlMtoWiSuLa7GzQ\n\n\n
EnO04N1nEkpWbfXRxrtYNqCZDpF\trQIXS
aderchox
fonte