मुझे आश्चर्य है कि क्यों आम लिनक्स टर्मिनलों में बैकस्पेस चरित्र वास्तव में, वर्ण मिटा नहीं है जब मुद्रित (सामान्य रूप से जब आपके द्वारा लिखे गए काम करता है) ..बैकस्पेस चरित्र weirdness
यह अपेक्षा के अनुरूप काम करता है:
$ echo -e "abc\b\b\bxyz"
xyz
(\b
बैकस्पेस को मूल्यांकन करता है, के रूप में Ctrl +वीCtrl भी डाला जा सकता है + एच -रूप में प्रदान की(0x08
))
लेकिन जब वहाँ backspaces के बाद कम चरित्र, अजीब व्यवहार से पता चला है:
$ echo -e "abc\b\b\bx"
xbc
यह बैकस्पेस के बजाय छोड़ दिया तीर कुंजी की तरह बर्ताव:
$ echo -e "abc\e[D\e[D\e[Dx"
xbc
मिटा लाइन बैक सामान्य रूप से काम करता है:
$ echo -e "abc\e[1Kx"
x
वास्तव में , जब मैं Ctrl + वीबैकस्पेस टर्मिनल में टाइप ^?
(0x7f
) ^H
के बजाय सामने आए है, इस डेल ASCII वर्ण, लेकिन Ctrl + वीडेल पैदा करता <ESC>[3~
है, लेकिन यह एक और कहानी है ..
तो क्या कोई यह समझा सकता है कि क्यों मुद्रित बैकस्पेस वर्ण वर्णों को मिटा नहीं देता है?
अच्छी तरह से, यह एक स्पष्टीकरण नहीं है _why_ बैकस्पेस नियंत्रण चरित्र बाएं कर्सर कुंजी की तरह व्यवहार करता है, कॉमन्स अर्थ के अनुसार नहीं (अंतिम चरित्र मिटाएं) – mykhal
अब मैं संतुष्ट हूं, spec लिंक के लिए धन्यवाद :) – mykhal
वास्तविक कारण यह काम करता है इस तरह से पुरानी, "हार्ड कॉपी" टर्मिनलों की वजह से एक टाइपराइटर की तरह पेपर पर प्रिंट किया जाता है।इस तरह के एक टर्मिनल पर आउटपुट होने के बाद एक चरित्र को मिटाने का कोई तरीका नहीं है। टाइपराइटर-जैसे टर्मिनल भी कारण हैं कि हम अभी भी विंडोज़ पर लाइनों को समाप्त करने के लिए अलग "कैरिज रिटर्न" और "लाइन फीड" वर्णों से फंस गए हैं। – alexis