Was bedeutet read -r?


21

Um eine andere Antwort zu verstehen:

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

Der erste Schritt besteht darin, die Verwendung der Option -r des Lesebefehls zu verstehen.

Zunächst dachte ich, es würde ausreichen, einfach auszuführen

man read

um die Bedeutung der Option -r nachzuschlagen, aber ich erkannte, dass die Manpage überhaupt keine Erklärung für die Option enthält, und googelte, um einige Beispiele für read -t, read -p, aber kein read -r zu erhalten.


Wollen Sie damit sagen, dass es keine Manpage zum Lesen gibt? Wenn ich man read eintippe, bekomme ich eine lange Liste mit eingebauten Bash-Befehlen. Ich habe mit '/ read' gesucht. Ich habe das, was ich gesehen habe, hier
eingefügt.

1
Es ist eine eingebaute Shell (zumindest in Bash) - try help readorman bash
steeldriver

Bezüglich Ihrer Titelfrage
Gilles '

READ(1P)existiert für mich ...
jasonwryan

Antworten:


27

Es gibt keinen eigenständigen readBefehl: Stattdessen handelt es sich um eine integrierte Shell, die als solche in der Manpage für Folgendes dokumentiert ist 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.

Zusammenfassend lässt man also readnormalerweise zu, dass lange Zeilen mit einem abschließenden Backslash unterbrochen werden, und rekonstruiert normalerweise solche Zeilen. Dieses etwas überraschende Verhalten kann mit deaktiviert werden -r.


10
Eine Demo:str="a\bc"; read x <<< "$str"; read -r y <<< "$str"; echo "$x"; echo "$y"
Glenn Jackman

@glennjackman Das ist großartig, es ist noch auffälliger, wenn Sie str="a` and then hit Enter before pasting in the rest of the command starting with b` eingeben.
ErikE

1

Die -rOption verhindert, dass umgekehrte Schrägstriche interpretiert werden . Hier ist ein Beispiel:

Angenommen, es gibt eine Datei mit folgendem Inhalt:

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.