read -r은 무슨 뜻인가요?

read -r은 무슨 뜻인가요?

이해하기 위해또 다른 대답(글렌 잭맨):

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

첫 번째 단계는 -r명령 옵션의 사용법을 이해하는 것입니다 read.

일단은 그냥 하는 것만으로도 충분할 것 같아요

man read

옵션이 무엇을 의미하는지 찾아보았지만 -r매뉴얼 페이지에 옵션에 대한 설명이 전혀 포함되어 있지 않다는 것을 알고 구글링을 했습니다. 몇 가지 read -t예가 있지만 read -p없습니다 read -r.

답변1

독립 실행형 명령은 없습니다 read. 대신 내장 셸이므로 매뉴얼 페이지에 설명되어 있습니다 bash.

read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]

        ︙
    -r
      백슬래시는 이스케이프 문자로 작동하지 않습니다. 백슬래시는 줄의 일부로 간주됩니다. 특히 백슬래시-개행 쌍은 줄 연속으로 사용할 수 없습니다.

따라서 요약하면 read후행 백슬래시 문자를 사용하여 긴 줄을 나누는 것이 일반적으로 허용되며 해당 줄은 일반적으로 다시 작성됩니다. 이 다소 놀라운 동작은 를 사용하여 비활성화할 수 있습니다 -r.

답변2

-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

답변3

배쉬 매뉴얼 페이지부분about은 read기본적으로 다음을 지적합니다.

백슬래시 문자(\)은 다음 문자 읽기 및 줄 연속의 특별한 의미를 제거하는 데 사용할 수 있습니다.

하지만 합격 -r하면

백슬래시는 이스케이프 문자로 작동하지 않습니다. 백슬래시는 줄의 일부로 간주됩니다. 특히 백슬래시-개행 쌍은 줄 연속으로 사용할 수 없습니다.

잠시 생각해 보면 그들이 말할 수 있는 유일한 "특별한 의미"는 구분 기호 역할을 하는 문자뿐입니다. 정말,아니요 -r, 백슬래시 이스케이프 구분 기호 또는 개행 문자를 사용할 수 있지만그리고 -r, 그렇게 할 수 없습니다. 백슬래시는 리터럴 백슬래시로만 해석됩니다.

$ read -d 'x'    var1 <<< 'There was once \
a curious Uni\x user.xHe did a little test.'
$ echo "$var1"
There was once a curious Unix user.
$ read -d 'x' -r var2 <<< 'There was once \
a curious Uni\x user.xHe did a little test.'
$ echo "$var2"
There was once \
a curious Uni\

관련 정보