Lan*_*nes 74 command-line echo
我知道我可以删除最后三个字符:
echo -ne '\b\b\b'
Run Code Online (Sandbox Code Playgroud)
但是如何删除整行?我的意思是我不想使用:
echo -ne '\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b'
Run Code Online (Sandbox Code Playgroud)
...等...删除长行。
Kev*_*vin 130
您正在寻找终端转义。特别是,从光标位置清除到行首:
echo -e "\033[1K"
Run Code Online (Sandbox Code Playgroud)
或者行上的所有内容,无论光标位置如何:
echo -e "\033[2K"
Run Code Online (Sandbox Code Playgroud)
你也可以用终端转义来做各种其他巧妙的技巧。
les*_*ana 64
您可以使用\b或\r将光标移回,然后用新字符覆盖打印的字符。请注意,既不\b也不\r删除打印的字符。它只是将光标移回。\b将光标向后移动一个字符并将\r光标移动到行首。
示例:两者
echo -e 'foooo\b\b\b\b\bbar'
Run Code Online (Sandbox Code Playgroud)
和
echo -e 'foooo\rbar'
Run Code Online (Sandbox Code Playgroud)
将打印:
baroo
Run Code Online (Sandbox Code Playgroud)
如果要删除字符,则必须使用以下解决方法:
echo -e 'fooooo\r \rbar'
Run Code Online (Sandbox Code Playgroud)
输出:
bar
Run Code Online (Sandbox Code Playgroud)
摘自man echo:
If -e is in effect, the following sequences are recognized:
\0NNN the character whose ASCII code is NNN (octal)
\\ backslash
\a alert (BEL)
\b backspace
\c produce no further output
\f form feed
\n new line
\r carriage return
\t horizontal tab
\v vertical tab
NOTE: your shell may have its own version of echo, which usually super?
sedes the version described here. Please refer to your shell's docu?
mentation for details about the options it supports.
Run Code Online (Sandbox Code Playgroud)
Arc*_*ege 37
如果你想清除行,那么我建议你使用回车的组合人提和terminfo。
# terminfo clr_eol
ceol=$(tput el)
echo -ne "xyzzyxyzzy\r${ceol}foobar"
Run Code Online (Sandbox Code Playgroud)
这将写入xyzzyxyzzy,然后返回到行首并将“清除到行尾”序列发送到终端,然后写入foobar。在-n之后的品牌回声无法添加新行foobar。
koj*_*iro 12
您明确要求echo,但这个要求让您失望。这是一种使用printf带有大括号扩展的bash 内置命令的方法:
printf 'fooooooooo' # 10 characters
printf '\r'; printf ' %0.s' {0..9} # 10 expansions of the space character
Run Code Online (Sandbox Code Playgroud)
小智 11
这是一个使用 echo 的无换行 -n和回车 \r选项的示例。
#!/bin/bash
CHECK_MARK="\033[0;32m\xE2\x9C\x94\033[0m"
echo -e "\n\e[4mDoing Things\e[0m"
echo -n "doing thing 1..."
sleep 1
echo -e "\\r${CHECK_MARK} thing 1 done"
Run Code Online (Sandbox Code Playgroud)