`[$'\r\n']`은(는) 무슨 뜻인가요?

`[$'\r\n']`은(는) 무슨 뜻인가요?

저는 이 표현을 많이 사용합니다 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'](참고: 로 시작 /하므로 패턴의 모든 항목이 대체됨).
  • 이것비어 있으므로 /이후에는무늬생략되고 일치 항목이 제거됩니다.

다음 규칙을 따르세요패턴 매칭:

[…]
포함된 모든 문자와 일치합니다.

$'...'\rbash에게 특정 이스케이프 시퀀스(여기서는 캐리지 리턴 및 줄 바꿈) 를 해석 \n하고 이를 이스케이프 시퀀스가 ​​나타내는 실제 문자로 바꾸도록 지시합니다.

따라서 이 교체는 캐리지 리턴(CR, \r) 또는 줄 바꿈(LF, \n)의 모든 인스턴스를 일치시키고 제거합니다.

답변3

$ 의미: 보기 모드의 줄 끝 패턴은 '\r\n'입니다. 의미: \r(캐리지 리턴 문자) \n(줄 바꿈 문자)

대괄호 [ ]는 검색 대상을 별도의 줄로 묶는 데 사용됩니다.

관련 정보