입력의 백스페이스 키를 어떻게 처리합니까? 5개의 문자가 이미 완료되었으므로(실제로 입력된 문자가 하나도 없음에도 불구하고) 프롬프트로 돌아가면 이상하게 ^?
시도되었는지 여부와 read
문자 계산 방법이 표시됩니다. . 도와주세요!12^?3
12^?3^?
-bash-3.2$ read -n 5
12^?3^?-bash-3.2$
답변1
read
일반(또는 이 동작에 영향을 주지 않는 다른 옵션)을 사용하여 전체 줄을 읽을 때 read -r
커널 제공 줄 편집기는 Backspace한 문자와 극소수의 다른 문자를 지우는 키를 인식합니다.주문하다( Return입력 라인을 완성하고 전송하는 것을 포함) 단축키는 다음과 같습니다.구성된그리고stty
유용. 라인 편집기가 활성화되면 터미널이 베이킹 모드에 있다고 합니다. 원시 모드에서는 키보드에 입력된 모든 문자가 즉시 응용 프로그램으로 전송됩니다. 베이킹 모드에서는 문자가 버퍼에 저장되고 완전한 라인만 애플리케이션으로 전송됩니다.
구현할 문자 수가 고정된 이후 읽기를 중지하려면 read -n
bash는 원시 모드로 전환해야 합니다. 원시 모드에서 터미널은 키를 눌러도 아무 작업도 수행하지 않으며 Backspace(키를 누르면 Backspace앞의 문자가 이미 bash로 전송됨) bash도 아무 작업도 수행하지 않습니다(아마도 이것이 더 많은 유연성을 제공하기 때문일 것입니다). 자체 처리).
-e
bash의 자체 라인 편집기(커널의 매우 조잡한 라인 편집기가 아닌 적절한 라인 편집기인 readline)를 활성화하는 옵션을 전달할 수 있습니다 . Bash는 줄 편집을 수행하므로 요청된 문자 수에 도달하면 읽기를 중지합니다.
답변2
답변3
read
bash 내장 기능입니다. (참조 type read
) 다음을 통해 문서를 찾을 수 있습니다 man bash
.
read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
[...]
-e If the standard input is coming from a terminal, readline (see READLINE above) is used to obtain the line.
Readline uses the current (or default, if line editing was not previously active) editing settings.
또는 다음을 사용할 수 있습니다 help read
.
read: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
-e use Readline to obtain the line in an interactive shell
이 -e
스위치는 readline 지원을 활성화하여 백스페이스 처리를 포함하여 쉘 프롬프트에서 기본적으로 모든 기능을 사용할 수 있도록 합니다.
그러니 read -en 5
원하는 대로 하세요.