백스페이스 키로 에코

백스페이스 키로 에코

bash에서 이런 일이 발생하는 이유를 찾으려고 노력 중입니다.

  • 글쎄요, 쉽습니다.

    $ echo -e 'a\txy\bc'
    a   xc
    
  • 글쎄요, 쉽습니다.

    $ echo -e 'a\txy\b\b\b\b\b\b\b\b\bc'
    ac      xy
    
  • 글쎄요, 쉽습니다.

    $ echo -e 'a\txy\b\b\b\b\b\b\b\b\b\bc'
    c       xy
    
  • 자, 왜 c아직 왼쪽 끝이 떨어지지 않았나요?

    $ echo -e 'a\txy\b\b\b\b\b\b\b\b\b\b\b\bc'
    c       xy
    

내 예상 결과는 다음과 같습니다

<a tab>xy

그러나 분명히 그렇지 않습니다. 무슨 일이 일어날지 아는 사람 있나요? 감사해요.

답변1

이것은 주문과는 아무런 관련이 없습니다 echo. cat이나 다른 프로그램을 사용하여 출력을 작성하면 printf동일한 동작을 볼 수 있습니다. 이것은 당신의 한 측면이다단말기.

이 측면은 터미널마다 다를 수 있습니다. 터미널의 경우 terminfo 데이터베이스에는 termcap auto_left_margin이라는 기능이 있을 수도 있고 없을 수도 있습니다 bw. 이는 일부 터미널에서처럼 왼쪽 여백을 감싸는 데 백스페이스 키를 사용할 수 있는지 여부를 프로그램에 알려줍니다. 자동 왼쪽 여백이 있는 터미널을 사용하면 이전 줄에 나타 c납니다 .

탭을 다시 프로그래밍하면 더 다양한 동작을 볼 수 있습니다.

그런데 와 를 결합 TAB하면 흥미로운 일이 일어납니다 . BStermcap 매뉴얼의 25년 된 경고는 자동 왼쪽 여백 기능이 보고되지 않거나 커서가 첫 번째 줄에 있을 때 백스페이스가 여백을 초과한다는 것입니다.System V 인터페이스 정의FreeBSD 매뉴얼에 따르면 이것은 언뜻 보기에는 이상하고 지나치게 조심스러워 보일 수 있습니다.가지다알려진 터미널 제어 코드 처리는 이 작업을 완전히 올바르게 수행하지 않습니다.

추가 읽기

답변2

에코는 시작된 곳으로 돌아갈 수 없습니다. 백스페이스 키를 몇 번 눌러도 출력한 내용을 모두 지우면 원래 위치에 그대로 유지됩니다. 그렇기 때문에 백스페이스를 몇 번이나 눌러도 항상 "c" 문자가 표시됩니다.

관련 정보