在bash中删除回显线

int*_*ide 0 bash replace echo

var=ab
echo -n "$var"
Run Code Online (Sandbox Code Playgroud)

输出: ab

var=abc
echo "$var"
Run Code Online (Sandbox Code Playgroud)

输出: ababc

我想删除第一个ab并替换它abc

我该怎么办?

此致,知识产权

Wil*_*ell 11

也许你正在寻找类似的东西:

var=ab
echo -n "$var"
var=abc
echo -e "\r$var"
Run Code Online (Sandbox Code Playgroud)

这实际上并不删除任何内容,而只是将光标移动到行的开头并覆盖.如果写入的文本太短,则前一次写入的内容仍然可见.你可以在旧文本上写空格(非常简单和便携):

printf "\r%-${COLUMNS}s" "$var"
Run Code Online (Sandbox Code Playgroud)

或使用一些终端转义序列删除旧文本(不可移植):

echo -e "\r$var\033[K"
Run Code Online (Sandbox Code Playgroud)

移动到行的开头,写入新文本,然后从光标删除到行尾.(这可能不起作用,具体取决于终端.)