You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

bash中printf \r多行仅显示一行,如何实现三行实时更新?

实现多行内容实时更新(无新增行)

要实现三行内容每隔1秒更新且不新增行,核心是利用终端的ANSI光标控制转义序列,让光标回到之前的行位置覆盖原有内容,具体代码如下:

# 首次输出三行内容
printf '%s\n%s\n%s' 'first line here' 'second line here' 'third line here'
sleep 1

# 光标向上移动3行,回到第一行开头
printf '\033[3A'
# 输出新内容覆盖原有三行
printf '%s\n%s\n%s' 'iam new' 'new again' 'and new'
sleep 1

# 可选:循环更新示例(重复3次)
count=0
while [ $count -lt 3 ]; do
    printf '\033[3A'
    printf '%s\n%s\n%s' "Line 1: 第$((count+1))次更新" "Line 2: 第$((count+1))次更新" "Line 3: 第$((count+1))次更新"
    sleep 1
    count=$((count+1))
done

关键说明

  • \033[3A:ANSI转义序列,控制光标向上移动3行,这样后续的printf会从第一行开始覆盖原有内容
  • 初始输出用\n换行生成三行,替代原代码中的\r(\r仅能回到当前行首,无法跨行覆盖)
  • 循环更新时,每次执行\033[3A回到三行顶部,再输出新内容即可实现无新增行的更新

内容的提问来源于stack exchange,提问作者Anas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 23:55:14