![특수 문자 "^A", ^[, ^[[를 찾는 방법](https://linux55.com/image/188168/%ED%8A%B9%EC%88%98%20%EB%AC%B8%EC%9E%90%20%22%5EA%22%2C%20%5E%5B%2C%20%5E%5B%5B%EB%A5%BC%20%EC%B0%BE%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
출력 바인딩 키를 사용하는 방법을 알고 있습니다 bindkey
.
내가 grep
뭐라도 말해 줄래?
$ bindkey | grep line
"^A" beginning-of-line
"^E" end-of-line
"^J" accept-line
"^K" kill-line
...
^[G
그러나 나는 grep 하거나 기다릴 수 없습니다 ^[[A
.
$ bindkey | grep ^[G
zsh: bad pattern: ^[G
또는 같은 키워드를 어떻게 사용하나요 grep
?^[G
^[[A
답변1
두 가지 질문: 셸의 특수 문자와 정규식의 특수 문자입니다.
여는 괄호는 [
쉘의 파일 이름 확장 패턴에서 특별한 의미를 가지며, 이는 zsh가 이 오류에서 언급하는 것입니다. 문자 그대로 인용하라고 말할 수 있습니다. 작은따옴표나 큰따옴표 모두 괜찮지만 작은따옴표가 더 좋고 예외가 적습니다.
정규식에서 첫 번째 문자 ^
는 패턴이 줄의 시작 부분에 고정되어 있음을 나타내며 [
셸의 패턴과 유사한 특별한 의미를 갖습니다. 따라서 grep
둘 다 리터럴로 처리되도록 지시해야 하며 , 이는 백슬래시로 이스케이프 처리하여 수행됩니다.
그래서:
bindkey | grep '\^\[G'
^A
출력의 bindkey
두 문자 ^
(캐럿)와 (대문자 A) 는 A
키 바인딩에서 값이 1인 제어 문자인 Ctrl-A로 표시됩니다. 이 캐릭터에 대한 파악은 다를 것입니다.
답변2
옵션을 사용 -F
하고 따옴표를 사용하면 작동합니다.
~ % bindkey | grep -F '^[G'
"^[G" get-line
-F, --fixed-strings PATTERN을 줄 바꿈으로 구분된 고정 문자열 목록으로 해석하며, 둘 중 하나가 일치합니다. (-F는 POSIX에 의해 지정됩니다.)