Apa arti dari membaca -r?


21

untuk memahami jawaban lain:

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

langkah pertama adalah memahami penggunaan opsi -r dari perintah read.

Pertama, saya pikir, itu sudah cukup untuk hanya mengeksekusi

man read

untuk mencari arti opsi -r, tapi saya menyadari halaman manual tidak berisi penjelasan untuk opsi sama sekali, jadi saya googled karena mendapat beberapa baca -t, baca -p contoh tetapi tidak ada baca -r.


Apakah Anda mengatakan tidak ada halaman manual untuk dibaca? Jika saya mengetik man read, saya mendapatkan daftar panjang perintah Bash bawaan. Saya mencari menggunakan '/ membaca' Saya telah meletakkan apa yang saya lihat di sini pastebin.com/raw.php?i=tZ1uUXrG
user610209

1
Ini adalah shell yang dibangun (setidaknya dalam bash) - coba help readatauman bash
steeldriver


READ(1P)ada untukku ...
jasonwryan

Jawaban:


27

Tidak ada readperintah yang berdiri sendiri : sebagai gantinya, ini adalah sebuah shell bawaan, dan dengan demikian didokumentasikan dalam halaman manual untuk 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.

Jadi, untuk meringkas, readbiasanya memungkinkan garis panjang untuk dipecah menggunakan karakter garis miring terbalik, dan biasanya merekonstruksi garis tersebut. Perilaku yang sedikit mengejutkan ini dapat dinonaktifkan dengan menggunakan -r.


10
Demo:str="a\bc"; read x <<< "$str"; read -r y <<< "$str"; echo "$x"; echo "$y"
glenn jackman

@glennjackman Bagus sekali, bahkan lebih mencolok jika Anda mengetikkan str="a` and then hit Enter before pasting in the rest of the command starting with b`.
ErikE

1

The -rpilihan mencegah backslash lolos dari yang ditafsirkan . Ini sebuah contoh:

Asumsikan ada file dengan konten ini:

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.