2011-04-19 20 views
14

क्या बैश में बैकस्पेस गूंजना संभव है?बैकस्पेस को प्रतिबिंबित करना

कुछ

echo $'stack\b' 

चाहिए उत्पादन नहीं stac की तरह? या मुझे कुछ याद आ रहा है?

अधिक विशेष रूप से, मैं उपयोग करने के लिए है कि में करना चाहते हैं:

ls | wc -l; echo $'\b items' 

उत्तर

25

\b कर्सर ले जाने के लिए छोड़ दिया है, लेकिन यह चरित्र को मिटा नहीं है। यदि आप इसे मिटाना चाहते हैं तो एक स्पेस आउटपुट करें।

कुछ वितरणों के लिए आप भी echo की -e स्विच का उपयोग करना पड़ सकता है:

-e  enable interpretation of backslash escapes 

तो यह की तरह

echo -e 'stack\b ' 

इसके अलावा, files=(*) ; echo "${#files[@]} items" दिखेगा।

+0

हम्म, और निश्चित रूप से यह संभव नहीं बैकस्पेस को एक नई लाइन पर, ठीक है? यही कारण है कि मेरा प्रारंभिक समाधान काम नहीं करता (मुझे लगता है)। फाइल गिनती के अच्छे समाधान के लिए धन्यवाद। अगर मैं कर सकता था तो मैं +2 देता हूं :-) – sidyll

+0

हटाने की यह विधि न्यूलाइन के लिए क्यों काम नहीं करती है? – Geremia

+0

'\ b' टर्मिनल के बाएं किनारे तक एक एकल चरित्र वापस चला जाता है। एक नई लाइन सचमुच एक * नई लाइन * है, इसलिए दूसरी पंक्ति का अपना बायां किनारा है। –

1

यह वास्तव में क्या आप के लिए पूछ रहा है नहीं कर रहे हैं, लेकिन यह भी, इग्नेसियो के जवाब की पंक्ति में, तो आप इस मामले के लिए इस्तेमाल कर सकते हैं:

echo "$(ls | wc -l) items" 

AFAIK आप एक चरित्र है कि पहले एक को हटा देता है मुद्रित नहीं कर सकते , यहां तक ​​कि उन char को मुद्रित भी नहीं किया जिनके हेक्साडेसिमानल संख्या correspoonds बैकस्पेस के लिए। हालांकि, आप वापस ले जा सकते हैं और हटाने के लिए रिक्त स्थान प्रिंट कर सकते हैं। cput के साथ आप स्क्रीन पर जहां भी चाहें कई चीजें कर सकते हैं और प्रिंट कर सकते हैं।

2

तो backspaces के बारे में वास्तविक सवाल एक बैकस्पेस जवाब देने के लिए इस अनुकरण करेगा: - प्रभाव में

echo -e "\b \b" 

यह चरित्र वापस चले जाएँगे एक है, तो एक अंतरिक्ष अधिलेखन जो चरित्र था, उसके बाद फिर से वापस जाने गूंज पिछले चरित्र को हटा रहा है। यह वापस आ गया एक लाइन अप जाना होगा नहीं है, हालांकि इतना है कि इससे पहले कि उत्पादन एक नई लाइन नहीं बनाना चाहिए:

echo -n "blahh"; echo -e "\b \b" 
संबंधित मुद्दे