在bash中,是否有可能输出一个退格符号?
类似这样:
echo $'stack\b'
输出不应该是stac
吗?还是我有所遗漏?
更具体地说,我想在这里使用它:
ls | wc -l; echo $'\b items'
\b
让光标向左移动,但它不会擦除字符。如果你想要擦除字符,请输出一个空格。
对于某些发行版,您可能还需要使用echo
的-e
开关:
所以它将看起来像:-e enable interpretation of backslash escapes
echo -e 'stack\b '
此外,
files=(*) ; echo "${#files[@]} items"
。
因此,回答关于退格键的实际问题,此操作将模拟一个退格键:
echo -e "\b \b"
它会将字符向后移动一个位置,然后回显一个空格,覆盖之前的任何字符,然后再次向后移动 - 实际上是删除先前的字符。但它不会回到上一行,因此在那之前的输出不应该创建新行:
echo -n "blahh"; echo -e "\b \b"
虽然不完全符合您的要求,但是在Ignacio的回答中,您可以使用以下方法:
echo "$(ls | wc -l) items"
\b
会回退一个字符,直到终端的左边缘。换行符实际上是一个新行,因此第二行有自己的左边缘。 - Ignacio Vazquez-Abramsecho -n 'test'
=> 没有换行符(即“-n”)。 - undefined