Qual è il significato di read -r?


21

per capire un'altra risposta:

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

il primo passo è capire l'uso dell'opzione -r del comando read.

In primo luogo, ho pensato, sarebbe sufficiente eseguire semplicemente

man read

per cercare il significato dell'opzione -r, ma mi sono reso conto che la pagina man non contiene alcuna spiegazione per l'opzione, quindi ho cercato su google perché avesse degli esempi read -t, read -p ma nessuna lettura -r.


Stai dicendo che non esiste una pagina man da leggere? Se scrivo man read ottengo un lungo elenco di comandi integrati in Bash. Ho cercato usando '/ leggi' Ho messo quello che ho visto qui pastebin.com/raw.php?i=tZ1uUXrG
user610209

1
È una shell integrata (almeno in bash) - prova help readoman bash
steeldriver il


READ(1P)esiste per me ...
Jasonwryan il

Risposte:


27

Non esiste un readcomando autonomo : è invece una shell integrata e come tale è documentata nella pagina man per 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.

Quindi, per riassumere, readnormalmente consente di spezzare le linee lunghe usando un carattere barra rovesciata e di solito ricostruisce tali linee. Questo comportamento leggermente sorprendente può essere disattivato usando -r.


10
Una demo:str="a\bc"; read x <<< "$str"; read -r y <<< "$str"; echo "$x"; echo "$y"
Glenn Jackman,

@glennjackman È fantastico, è ancora più sorprendente se digiti str="a` and then hit Enter before pasting in the rest of the command starting with b`.
ErikE,

1

L' -ropzione impedisce l'interpretazione delle escape di barra rovesciata . Ecco un esempio:

Supponiamo che ci sia un file con questo contenuto:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.