2013-08-04 146 views
0
#!/bin/bash 
echo "hello^H^H" #hello 
echo "hello^H^H " #hel o 

我知道^ H在控制台中删除一个字母。但为什么第一个回声没有效果,第二个回声是“hel o”。^H在bash变量

+0

我试图在我的Mac OS X( 10.8.4)并产生正确的输出 –

回答

3

退格只是将光标向右移动一个位置而不实际擦除屏幕上打印的内容。只有你的第二条指令通过用字符串中的尾部空格覆盖它而实际上消除了字符。

我会尝试对其进行可视化:

$ echo "hello^H^H" 
hello 
^
    `-- cursor position 
$ echo "hello^H^H " 
hel o 
    ^
    `-- cursor position 
+0

是的,这是正确的答案。 &添加,一些终端模拟器用'\ b \ b'(其中'\ b'或'^ H'是退格字符)替换单个'\ b',以便退格字符实际显示删除的字符... – anishsane

+0

@anishsane哪个终端做到这一点? –

+0

我曾在Windows超级终端中看到过它,通常用于串行端口通信或串行TCP上。不确定,如果它在任何Linux终端上都可用。也许,我说“某些终端仿真器”是错的,因为我只知道一个。 – anishsane

0

$回声 “你好^ H^H” 你好 ^ -- cursor position $ echo "hello^H^H " hel o ^ - 光标位置