为什么`\ b`在作为echo中的最后一个字符时不起作用?

时间:2018-01-12 05:47:51

标签: bash

当我在Mac上测试bash脚本时,你知道\b是DEL函数:

$ echo -e "\\  2\b"
\  2
$ echo -e "\\  2\b123"
\  123
$ echo -e "\\  2\b "
\   

我发现如果\b作为最后一个字符不起作用,请参阅第一个案例。 但如果它后面有空格或其他字符,它就会起作用。

修改

抱歉,\b不是DEL,它是退格,谢谢@Evert

1 个答案:

答案 0 :(得分:5)

#toast-container > div { opacity: 1; -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); filter: alpha(opacity=100); } 不代表DEL,它代表退格。这会将终端光标向后移动一个空格,但不会对已经退格的字符执行任何操作。如果你在退格字符之后打印一些内容,那么它将被写在前一个字符上(有效地删除它),但如果你不这样做,它就会保留在屏幕上。如果您想真正删除该字符,请发送退格+空格+退格(即\b)。

BTW,"\b \b"不是打印这样的序列的好方法。有些版本将转义序列转换为它们所代表的字符,但有些版本只是按字面打印转义符。当Mac OS X v10.5问世时,我不得不重写一堆我的脚本,并且行为与我预期的不同。从那时起,我总是首选echo来表达任何不平凡的事情。它比printf复杂一点,因为第一个参数被视为格式字符串,用于控制其余参数的打印方式。此外,它不会像echo那样在结尾处自动添加换行符,因此如果您需要,则必须手动添加(echo}。

最后,我对包含转义序列的字符串使用单引号,因为在双引号中某些转义序列在被发送到命令之前由shell解释(是\n还是echo)。所以我的第二个例子就是这样:

printf