如何在 shell 中用 echo 或 printf 覆盖多行?

How can I overwrite multiple lines with echo or printf in shell?

我有一些 shell 功能,一个在多行上将一些 ASCII 艺术画到屏幕上,例如:

printf %s '
______________
||__________||

'
sleep 1
clear
printf %s '
______________
||__________||
      ||
      ||
      ||

'
sleep 1
clear
printf %s '
______________
||__________||
      ||
      ||
      ||
||‾‾‾‾‾‾‾‾‾‾||
‾‾‾‾‾‾‾‾‾‾‾‾‾‾
'

有没有办法在不清除屏幕的情况下覆盖字符串?我试过在每一行和最后一行使用 \r 但这似乎只能替换一行字符串。

这完全取决于您的终端。许多终端允许发送转义序列将光标移动到起始位置。这可能作为 terminfo(1) 命令可用

tput home
printf 'Cursor now home\n'

如果有,请参阅 man terminfo。如果不是,您需要告诉我们您的 TERM 环境变量 (echo $TERM) 的值。