Quelle est la signification de read -r?

22

afin de comprendre une autre réponse:

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

la première étape consiste à comprendre l'utilisation de l'option -r de la commande read.

Tout d'abord, je pensais, il suffirait d'exécuter simplement

man read

pour rechercher la signification de l'option -r, mais je me suis rendu compte que la page de manuel ne contient aucune explication pour l'option, alors j'ai recherché sur google pour obtenir des exemples de lecture -t, de lecture -p mais pas de lecture -r.

Abdul Al Hazred
la source
Êtes-vous en train de dire qu'il n'y a pas de page de manuel à lire? Si je tape man read, j'obtiens une longue liste de commandes Bash intégrées. J'ai cherché en utilisant '/ read' J'ai mis ce que j'ai vu ici pastebin.com/raw.php?i=tZ1uUXrG
user610209
1
C'est un shell intégré (au moins en bash) - essayez help readouman bash
steeldriver
En ce qui concerne votre question sur le titre, lisez unix.stackexchange.com/questions/18886/…
Gilles 'SO- arrête d'être méchant'
READ(1P)existe pour moi ...
jasonwryan

Réponses:

27

Il n'y a pas de readcommande autonome : à la place, c'est un shell intégré, et comme tel est documenté dans la page de manuel pour 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.

Donc, pour résumer, readpermet normalement de rompre les longues lignes à l'aide d'un caractère de barre oblique inverse et reconstruit normalement ces lignes. Ce comportement légèrement surprenant peut être désactivé à l'aide de -r.

dhag
la source
10
Une démo:str="a\bc"; read x <<< "$str"; read -r y <<< "$str"; echo "$x"; echo "$y"
Glenn Jackman
@glennjackman C'est super, c'est encore plus frappant si vous tapez str="a` and then hit Enter before pasting in the rest of the command starting with b`.
ErikE
1

L' -roption empêche les échappements de barre oblique inverse d'être interprétés . Voici un exemple:

Supposons qu'il existe un fichier avec ce contenu:

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
la source