이해하기 위해또 다른 대답(글렌 잭맨):
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\