Tôi tự hỏi tại sao nhân vật xóa lùi trong thiết bị đầu cuối Linux phổ biến không thực sự xóa các nhân vật, khi in (mà thường hoạt động khi gõ) ..Backspace nhân vật weirdness
này hoạt động như mong đợi:
$ echo -e "abc\b\b\bxyz"
xyz
(\b
đánh giá để backspace, có thể được chèn cũng như Ctrl +VCtrl +H - render như ^H
(0x08
))
nhưng khi có ít nhân vật sau khi backspaces, hành vi kỳ lạ được tiết lộ:
$ echo -e "abc\b\b\bx"
xbc
nó hoạt động như phím mũi tên trái thay vì xóa lùi:
$ echo -e "abc\e[D\e[D\e[Dx"
xbc
erase dòng trở lại hoạt động bình thường:
$ echo -e "abc\e[1Kx"
x
Thực tế , Khi tôi gõ Ctrl + VBackspace trong thiết bị đầu cuối, ^?
(0x7f
) đang mang lại thay vì ^H
, đây là Del ascii nhân vật, nhưng Ctrl + VDel sản xuất <ESC>[3~
, nhưng nó là một câu chuyện khác ..
Vì vậy, ai đó có thể giải thích lý do tại sao nhân vật backspace in không xóa các ký tự?
(môi trường của tôi là xterm Linux và một số giả lập thiết bị đầu cuối khác, $TERM
== xterm
, cố gắng vt100
, Linux
cũng)
tốt, đây không phải là giải thích _why_ ký tự điều khiển backspace hoạt động như phím con trỏ trái, không theo ý nghĩa của commons (xóa ký tự cuối cùng) – mykhal
bây giờ tôi hài lòng, cảm ơn liên kết cụ thể :) – mykhal
Lý do REAL nó hoạt động theo cách này là vì các thiết bị đầu cuối cũ hơn, "bản sao cứng" in trên giấy giống như máy đánh chữ.Trên một thiết bị đầu cuối như vậy không có cách nào để xóa một ký tự khi nó được xuất ra. Thiết bị đầu cuối giống như máy đánh chữ cũng là lý do chúng tôi vẫn bị mắc kẹt với các ký tự "vận chuyển trở lại" và "nguồn cấp dữ liệu dòng" riêng biệt để kết thúc các dòng trên Windows. – alexis