ecoa com backspace

1

Estou tentando entender por que isso acontece no bash.

  • Ok, isso é bastante fácil.

    $ echo -e 'a\txy\bc'
    a   xc
    
  • Ok, isso é bastante fácil.

    $ echo -e 'a\txy\b\b\b\b\b\b\b\b\bc'
    ac      xy
    
  • Ok, isso é bastante fácil.

    $ echo -e 'a\txy\b\b\b\b\b\b\b\b\b\bc'
    c       xy
    
  • Agora, por que c não caiu do lado esquerdo?

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

Eu esperava que a saída fosse:

<a tab>xy

Mas claramente esse não é o caso. Alguém tem um indicador do que pode estar acontecendo? Obrigado.

    
por gumchew 24.04.2015 / 18:22

2 respostas

2

Isso não tem nada a ver com o comando echo . Você veria esse mesmo comportamento se escrevesse a saída usando cat , printf ou algum outro programa. Este é um aspecto do seu terminal .

E os terminais podem diferir entre si nesse aspecto. O banco de dados terminfo terá ou não terá, para o seu terminal, um recurso auto_left_margin , conhecido como bw no termcap. Isso indica aos programas se o backspace pode ser usado para contornar a margem esquerda, como acontece em alguns terminais. Se você tivesse usado um terminal com margens automáticas à esquerda, o c teria aparecido na linha anterior.

E se você tivesse reprogramado suas tabstops, teria visto um comportamento ainda mais diferente.

Coisas interessantes podem acontecer quando se combina TAB e BS , a propósito. O aviso de 25 anos no manual termcap sobre o retrocesso na margem quando não há capacidade de margem esquerda automática relatada ou quando o cursor está na primeira linha, reimpresso em todos os lugares da System V Interface Definition para o manual do FreeBSD, pode parecer estranho e exagerado à primeira vista; mas o mundo tem o conhecido processamento de código de controle de terminal que não acertou isso completamente.

Leitura adicional

por 24.04.2015 / 20:36
2

O echo não pode voltar atrás da posição em que começou. Não importa quantos backspaces você use, uma vez que você tenha apagado tudo que você produziu, ele permanece na posição inicial. É por isso que você sempre vê o caractere 'c', no entanto, muitas vezes você retrocede.

    
por 24.04.2015 / 18:26