¿Cuál es el significado de leer -r?

21

para entender otra respuesta:

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

El primer paso es comprender el uso de la opción -r del comando de lectura.

Primero, pensé, sería suficiente simplemente ejecutar

man read

para buscar el significado de la opción -r, pero me di cuenta de que la página del manual no contiene ninguna explicación para la opción, así que busqué en Google algunos ejemplos de lectura -t, lectura -p pero no lectura -r.

Abdul Al Hazred
fuente
¿Estás diciendo que no hay una página de manual para leer? Si escribo man read, obtengo una larga lista de comandos integrados de Bash. Busqué usando '/ leer'. Puse lo que vi aquí pastebin.com/raw.php?i=tZ1uUXrG
user610209
1
Es una carcasa incorporada (al menos en bash) - prueba help readoman bash
steeldriver
Con respecto a su pregunta sobre el título, lea unix.stackexchange.com/questions/18886/…
Gilles 'SO- deja de ser malvado'
READ(1P)existe para mí ...
jasonwryan

Respuestas:

27

No hay un readcomando independiente : en cambio, es un shell incorporado y, como tal, está documentado en la página del 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.

Entonces, para resumir, readnormalmente permite que las líneas largas se rompan usando un carácter de barra diagonal inversa posterior, y normalmente reconstruye dichas líneas. Este comportamiento ligeramente sorprendente se puede desactivar usando -r.

dhag
fuente
10
Una demostración:str="a\bc"; read x <<< "$str"; read -r y <<< "$str"; echo "$x"; echo "$y"
Glenn Jackman
@glennjackman Eso es genial, es aún más sorprendente si str="a` and then hit Enter before pasting in the rest of the command starting with escribes b`.
ErikE
1

La -ropción evita que se interpreten los escapes de barra invertida . Aquí hay un ejemplo:

Supongamos que hay un archivo con este contenido:

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
fuente