2011-04-19 41 views
14

是否可以在bash中回顯退格?回退退格

喜歡的東西

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 2011-04-19 23:37:24

+0

爲什麼這種刪除方法不適用於換行符? – Geremia 2017-08-04 21:24:17

+0

'\ b'返回一個字符,直到終端的左邊。換行符字面上是*新行*,因此第二行有它自己的左邊緣。 – 2017-08-04 21:28:25

1

這不是你要求什麼,而且,在伊格納西奧的回答行了,你可以使用這種情況:

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

AFAIK你不能打印刪除前一個字符,甚至不會打印其十六進制數字相反的字符。不過,您可以移回並打印一個空白區域以進行刪除。用cput你可以做很多事情,並在屏幕上任何你想要的地方打印。

2

所以回答關於退格的實際問題,這將模擬退格鍵:

echo -e "\b \b" 

它將角色向後移動,然後回顯的空間覆蓋的任何性質在那裏,然後再搬回 - 有效刪除前一個字符。它不會回去一條線,所以之前的輸出不應該創建一個新的線:

echo -n "blahh"; echo -e "\b \b"