Яке значення читати -r?


21

щоб зрозуміти іншу відповідь:

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

перший крок - зрозуміти використання параметра -r команди read.

По-перше, я думав, досить буде просто виконати

man read

шукати значення параметра -r, але я зрозумів, що man-сторінка зовсім не містить пояснення для параметра, тому я переглянув, що для цього я отримав декілька прикладів read -t, read -p, але не -r.


Ви хочете сказати, що немає жодної сторінки для читання? Якщо я наберіть man read, я отримаю довгий список Bash, вбудований у команди. Я шукав за допомогою "/ читати" Я поклав те, що я побачив тут pastebin.com/raw.php?i=tZ1uUXrG
user610209

1
Це снаряд, вбудований (принаймні в баш) - спробуйте help readабоman bash
steeldriver

Щодо вашого титульного запитання, прочитайте unix.stackexchange.com/questions/18886/…
перестань бути злим"

READ(1P)існує для мене ...
jasonwryan

Відповіді:


27

Окремої readкоманди немає: натомість це вбудована оболонка, і як така задокументована на сторінці man для 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.

Отже, підводячи підсумок, readзазвичай дозволяється переривати довгі рядки за допомогою символу зворотної косої риски, і зазвичай реконструює такі лінії. Це дещо дивне поведінку можна відключити за допомогою -r.


10
Демонстрація:str="a\bc"; read x <<< "$str"; read -r y <<< "$str"; echo "$x"; echo "$y"
glenn jackman

@glennjackman Це чудово, це ще більше вражає, якщо ви наберете str="a` and then hit Enter before pasting in the rest of the command starting with b`.
ErikE

1

Цей -rпараметр запобігає інтерпретації втечі зворотної косої риси . Ось приклад:

Припустимо, що є файл із цим вмістом:

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.