Ý nghĩa của đọc -r là gì?


21

để hiểu câu trả lời khác:

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

Bước đầu tiên là hiểu cách sử dụng tùy chọn -r của lệnh đọc.

Đầu tiên, tôi nghĩ, nó chỉ đủ để thực hiện

man read

để tra cứu ý nghĩa của tùy chọn -r, nhưng tôi nhận ra trang man không chứa bất kỳ lời giải thích nào cho tùy chọn này, vì vậy tôi đã tìm hiểu về nó có một số ví dụ đọc -t, đọc -p nhưng không đọc -r.


Bạn đang nói không có trang người đàn ông để đọc? Nếu tôi gõ man đọc, tôi nhận được một danh sách dài các lệnh Bash được xây dựng. Tôi đã tìm kiếm bằng cách sử dụng '/ read' Tôi đã đặt những gì tôi thấy ở đây pastebin.com/raw.php?i=tZ1uUXrG
user610209

1
Đó là một vỏ được xây dựng trong (ít nhất là trong bash) - thử help readhayman bash
steeldriver

Về câu hỏi tiêu đề của bạn, hãy đọc unix.stackexchange.com/questions/18886/NH
Gilles 'SO- ngừng trở nên xấu xa'

READ(1P)tồn tại đối với tôi ...
jasonwryan

Câu trả lời:


27

Không có readlệnh độc lập : thay vào đó, nó là một shell được tích hợp sẵn và như vậy được ghi lại trong trang man cho 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.

Vì vậy, để tóm tắt, readthông thường cho phép các dòng dài bị phá vỡ bằng cách sử dụng ký tự dấu gạch chéo ngược và thường tái tạo lại các dòng đó. Hành vi hơi đáng ngạc nhiên này có thể bị vô hiệu hóa bằng cách sử dụng -r.


10
Một bản demo:str="a\bc"; read x <<< "$str"; read -r y <<< "$str"; echo "$x"; echo "$y"
glenn jackman

@glennjackman Thật tuyệt, nó còn nổi bật hơn nữa nếu bạn gõ str="a` and then hit Enter before pasting in the rest of the command starting with b`.
ErikE

1

Các -rtùy chọn ngăn chặn dấu chéo ngược thoát khỏi bị giải thích . Đây là một ví dụ:

Giả sử có một tệp có nội dung này:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.