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.


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.