Read -r'nin anlamı nedir?


21

başka bir cevabı anlamak için:

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

ilk adım, read komutunun -r seçeneğinin kullanımını anlamaktır.

İlk önce, sadece yürütmenin yeterli olacağını düşündüm

man read

-r seçeneğinin anlamını aramak için, ancak man sayfasının seçenek için herhangi bir açıklama içermediğini fark ettim, bu yüzden googled 'i -t, read -p örnekleri okudum, ancak -r okudım.


Okumak için erkek sayfası olmadığını mı söylüyorsun? Adam okuduğumda komutlarda yerleşik uzun bir Bash listesi alıyorum. Ben burada gördüklerimi koyduk 'okuma /' kullanarak bulmaya pastebin.com/raw.php?i=tZ1uUXrG
user610209

1
Bu (en azından bash) inşa edilmiş bir kabuk var - denemek help readveyaman bash
steeldriver

Başlık sorunuzla ilgili olarak, unix.stackexchange.com/questions/18886/…
Gilles '

READ(1P)benim için var ...
jasonwryan

Yanıtlar:


27

Tek başına bir readkomut yoktur: bunun yerine, yerleşik bir kabuktur ve man sayfasında bu şekilde belgelenmiştir 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.

Dolayısıyla, özetlemek gerekirse, readnormalde uzun satırların sondaki ters eğik çizgi karakteri kullanılarak kırılmasına izin verir ve normal olarak bu tür satırları yeniden oluşturur. Bu biraz şaşırtıcı davranış kullanılarak devre dışı bırakılabilir -r.


10
Bir demo:str="a\bc"; read x <<< "$str"; read -r y <<< "$str"; echo "$x"; echo "$y"
Glenn jackman

@glennjackman Bu harika, b` yazarsanız daha da çarpıcı str="a` and then hit Enter before pasting in the rest of the command starting with .
ErikE,

1

-rSeçenek kaçar ters eğik çizgi önler yorumlanır . İşte bir örnek:

Bu içeriğe sahip bir dosya olduğunu varsayalım:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.