위쪽 및 아래쪽 화살표 키를 인쇄해 보세요.

위쪽 및 아래쪽 화살표 키를 인쇄해 보세요.

나는 이것을 가지고있다:

아래쪽 화살표 키를 읽었습니다.

abc@abc-ubuntu:~/bashpratice$ read -n 3 key
^[[Babc@abc-ubuntu:~/bashpratice$ 

나는 그것을 찾을 수 있었다

abc@abc-ubuntu:~/bashpratice$ echo $key | grep '\['
[B
abc@abc-ubuntu:~/bashpratice$ echo $key | grep '\[B'
[B

하지만 에코 키는 공백만 인쇄합니다.

abc@abc-ubuntu:~/bashpratice$ echo $key

abc@abc-ubuntu:~/bashpratice$ 

키 입력을 반향하면 공백만 제공되는 이유는 무엇입니까?

답변1

터미널에 downarrow를 입력하면 어떻게 되나요?

보고에 따르면 +를 입력 xxd -p하면 다음과 같습니다 .return

xxd -p
^[[B
1b5b420a

아래쪽 화살표 키를 누르면 3개의 문자 시퀀스가 ​​생성됩니다.

  • 첫 번째는 \x1b(일명 이스케이프됨, 참조 man ascii) 터미널에 다음과 같이 에코됩니다 ^[.
  • 두 번째는 \x5b, 즉 [,
  • 세 번째는 \x42, 즉 B.

마지막 문자는 \x0a개행 문자일 뿐입니다.

따라서 아래쪽 화살표는 터미널에 로 에코됩니다 ^[[B. 사실상 이는 1b5b42실제로 읽기 프로세스에 전송되는 16진수 시퀀스에 해당합니다.

실험 정보

변수 에 16진수 시퀀스가 key​​포함되어 있습니다 . 1b5b42확인하다

echo -n "$key" | xxd -p
1b5b42

물론 16진수 시퀀스(예: )를 grep캡처하는 것도 가능합니다 .5b42[B

그러나 터미널에 무언가를 보내면 이스케이프 문자는 \x1b특수 이스케이프 시퀀스의 시작으로 해석됩니다. 예를 들어, \x1b[31m대부분의 터미널에서 인식되는 시퀀스는 "빨간색 전경색 사용"을 의미합니다. 직접 확인해보세요:

echo -e 'hello \x1b[31myou'

이 시퀀스는 현재 색상을 변경하지만 아무것도 인쇄하지 않습니다. 다음 내용도 확인할 수 있습니다.

echo -e 'hello \x1b[Byou'

\x1b[B터미널이 특수 시퀀스를 "커서를 한 위치 아래로 이동"으로 해석하는 것을 볼 수 있습니다 .

그렇기 때문에 echo $key일부 빈 줄을 제외하고는 터미널에 직접적으로 아무것도 표시되지 않습니다.

— 1. 왜 인쇄되는지
잘 모르겠습니다 . 설정 결과가 일부 다릅니다.grep[B

답변2

단말기가 키 코드에 응답하지 않습니다. 이는 일반적으로 애플리케이션에 의해 표시되고 해석됩니다. 해당 애플리케이션은 시퀀스를 보내 cup거나(커서를 위로 올리거나) 내릴 수 있습니다(보통 ncurses 라이브러리 사용).

관련 정보