ความหมายของ read -r คืออะไร?


21

เพื่อที่จะเข้าใจคำตอบอื่น:

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

ขั้นตอนแรกคือการเข้าใจการใช้ตัวเลือก -r ของคำสั่ง read

ครั้งแรกฉันคิดว่ามันจะเพียงพอที่จะดำเนินการเพียงแค่

man read

เพื่อค้นหาความหมายของตัวเลือก -r แต่ฉันรู้ว่า man page ไม่มีคำอธิบายใด ๆ สำหรับตัวเลือกเลยดังนั้นฉันจึง googled เพราะมันมี read -t, read-p ตัวอย่าง แต่ไม่มี read -r


คุณกำลังบอกว่าไม่มีหน้าคนอ่านหรือไม่? ถ้าฉันพิมพ์ man อ่านฉันจะได้รับรายการคำสั่ง Bash ในตัว ฉันค้นหาโดยใช้ '/ อ่าน' ฉันใส่สิ่งที่ฉันเห็นที่นี่แล้วpastebin.com/raw.php?i=tZ1uUXrG
user610209

1
มันเป็นกระสุนในตัว (อย่างน้อยก็ต้องทุบตี) ลองhelp readหรือman bash
steeldriver

เกี่ยวกับคำถามชื่อของคุณอ่านunix.stackexchange.com/questions/18886/…
Gilles 'SO- หยุดความชั่วร้าย'

READ(1P)มีอยู่สำหรับฉัน ...
jasonwryan

คำตอบ:


27

ไม่มีreadคำสั่งแบบสแตนด์อะโลน: แทนมันคือเชลล์ในตัวและเป็นเช่นนั้นถูกบันทึกไว้ใน man page สำหรับ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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.