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.


Ê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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.