왜 `echo abc^H`는 `ab`만 인쇄하지 않습니까?

왜 `echo abc^H`는 `ab`만 인쇄하지 않습니까?

기억나는데, ^H의미는 Backspace. CTRL+V을 눌러 생성합니다 CTRL+H.

따라서 ^H마지막 문자는 이 위치를 Backspace누를 때와 동일한 효과를 가지므로 제거해야 합니다 Backspace.

대신 출력이 echo abc^H여전히 존재 하는 이유는 무엇입니까 ?abcab

답변1

backspace커서를 뒤로 이동하면 됩니다.

backspace(또는 delete구성에 따라 임의의 문자) 다음과 같은 경우에만 마지막으로 인쇄된 문자를 제거합니다.

  • echo예제처럼 명령어 출력이 아닌 키보드로 입력됩니다.
  • 최종 장치가 조리 모드에 있습니다(정상 상황).

예제에서 해당 문자를 제거하려면 c다음과 같이 다른 문자로 덮어써야 합니다.

echo "abc^H "

답변2

^V^H를 입력하면 백스페이스 명령을 실행하는 대신 백스페이스 코드를 문자열에 삽입할 수 있습니다. ^H는 파괴적인 백스페이스 키일 필요는 없습니다. 일부 소프트웨어에서는 이를 중복 인쇄하는 데 사용합니다.

나중에 생각하기: echo(1)의 작성자는 ^V와 제어 코드를 입력하면 제어 코드를 구문 분석하기 위해 다른 프로세스(echo(1)가 아님)가 필요하기 때문에 그렇게 하는 것이라고 추론했습니다. Ctrl-H를 사용하면 echo(1)는 0x08을 출력 문자열에 넣고 캐럿 및 H와 함께 표시합니다. 문자열이 INPUT에서 파괴적인 백스페이스로 0x08을 확인하는 항목으로 리디렉션되면 원하는 결과를 얻을 수 있습니다.

답변3

stty erase ^H문제가 해결될 것입니다.

관련 정보