Что означает чтение -r?


21

чтобы понять другой ответ:

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

Первый шаг - понять использование опции -r команды read.

Сначала я подумал, что достаточно просто выполнить

man read

чтобы найти значение опции -r, но я понял, что страница руководства вообще не содержит никакого объяснения опции, так что я погуглил, потому что у нее есть примеры read -t, read -p, но нет read -r.


Вы говорите, что нет справочной страницы для чтения? Если я наберу man read, я получу длинный список встроенных команд Bash. Я искал, используя '/ read', я поместил то, что увидел здесь pastebin.com/raw.php?i=tZ1uUXrG
user610209

1
Это встроенная оболочка (по крайней мере, в bash) - попробуйте help readилиman bash
Steeldriver

Относительно вашего заглавного вопроса, прочитайте unix.stackexchange.com/questions/18886/…
Жиль "

READ(1P)существует для меня ...
Jasonwryan

Ответы:


27

Автономной readкоманды не существует: вместо этого это встроенная оболочка, и поэтому она описана на странице руководства для 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"
Гленн Джекман

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