저는 이 표현을 많이 사용합니다 line=${line//[$'\r\n']}
. 그런데 이것이 무엇을 [$'\r\n']
의미하는가?
문자를 제거할 수 있다는 것은 알고 있지만 '\r\n'
어떻게 수행합니까? 두 문자의 인스턴스만 제거합니까, 아니면 단 한 문자의 일치 항목도 찾습니까?
이 구문의 사용법을 이해할 수 없습니다.
가능하시다면 매뉴얼 링크 부탁드립니다. 이 질문에 대한 답을 찾을 수 없습니다.
답변1
이 명령은 변수에서 모든 캐리지 리턴 및 줄 바꿈 바이트를 제거합니다 line
.
${line//XYZ}
이것은 매개변수 확장 을 위한 Bash(및 zsh 및 ksh) 확장입니다.모두패턴은 무엇 XYZ
이든 일치합니다 $line
.
이 패턴에는 [$'\r\n']
두 가지 구성 요소가 있습니다.[...]
성냥어느내부 문자. $'\r\n'
예ANSI-C 인용문(다른 확장자), 캐리지 리턴( \r
) 및 줄 바꿈( \n
) 바이트로 확장됩니다. 여기에는 캐리지 리턴 및 줄 바꿈 문자가 [$'\r\n']
포함되어 있으므로 [...]
둘 다 일치합니다.
이것완전한 매뉴얼껍데기명령, 연산자, 괄호 등이 모두 여기에 있습니다., POSIX/SUS/IEEE 1003.1 사양의 일부입니다. 이것불다참조 매뉴얼은 여기.
답변2
~에서배쉬 매뉴얼:
${범위/무늬/끈}
이것무늬파일 이름 확장과 마찬가지로 패턴을 생성하기 위해 확장됩니다.범위확장되고 가장 긴 일치무늬 해당 값은 문자열로 대체됩니다. 대회는 다음 규칙에 따라 진행됩니다(참조:패턴 매칭). 만약에 무늬, 로 시작하는/
모든 일치 항목무늬로 대체됩니다끈. ... 만약에끈비어 있음, 일치함무늬이 제거되며/
다음 패턴은 생략될 수 있습니다.
당신은 ${line//[$'\r\n']}
다음을 가지고 있습니다:
- 이것범위예
line
, - 이것무늬는 다음과 같습니다
/[$'\r\n']
(참고: 로 시작/
하므로 패턴의 모든 항목이 대체됨). - 이것끈비어 있으므로
/
이후에는무늬생략되고 일치 항목이 제거됩니다.
다음 규칙을 따르세요패턴 매칭:
[…]
포함된 모든 문자와 일치합니다.
$'...'
\r
bash에게 특정 이스케이프 시퀀스(여기서는 캐리지 리턴 및 줄 바꿈) 를 해석 \n
하고 이를 이스케이프 시퀀스가 나타내는 실제 문자로 바꾸도록 지시합니다.
따라서 이 교체는 캐리지 리턴(CR, \r
) 또는 줄 바꿈(LF, \n
)의 모든 인스턴스를 일치시키고 제거합니다.
답변3
$ 의미: 보기 모드의 줄 끝 패턴은 '\r\n'입니다. 의미: \r(캐리지 리턴 문자) \n(줄 바꿈 문자)
대괄호 [ ]는 검색 대상을 별도의 줄로 묶는 데 사용됩니다.