왜 "점"을 두 번 이스케이프 처리해야 합니까?

왜 "점"을 두 번 이스케이프 처리해야 합니까?

*(){}$with와 같은 특수 문자를 이스케이프 처리 \하여 리터럴로 처리 할 수 있다는 것을 알고 있습니다 .
예를 들어 \*또는\$

하지만 .두 번 해야 한다면, 그렇지 않으면 \\.특수 문자로 간주됩니다. 예:

man gcc | grep \\.

왜 그럴까요?

답변1

일반적으로 특수 문자를 문자 그대로 처리하려면 한 번만 이스케이프하면 됩니다. 여러 프로그램에서 패턴을 사용하기 때문에 두 번 수행해야 하는 경우도 있습니다.

귀하의 예를 논의해 보겠습니다.

man gcc | grep \\.

명령은 bash인터프리터와 grep. 첫 번째 이스케이프는 bashKnow를 \문자 그대로 받아들이게 하므로 두 번째 이스케이프가 전달됩니다 grep.

한 번만 이스케이프하면 점이 문자 그대로 취해져서 에 전달된다는 것을 \.알 수 있습니다 . 이것을 볼 때 점은 텍스트가 아닌 특수 문자라고 생각합니다.bash.grepgrep..

두 번 이스케이프하면 bash패턴이 \.에 전달됩니다 grep. 이제 grep문자 그대로의 지점이라는 것을 알 수 있습니다.

답변2

Bash가 인수를 해석하지 못하도록 하려면 인수를 따옴표로 묶으세요.

man gcc | grep "\."

관련 정보