【问题标题】:Bash: Overwrite previous echo command [duplicate]Bash:覆盖以前的回显命令[重复]
【发布时间】:2016-08-30 14:14:29
【问题描述】:
for i in {1..5};do
  echo $i/5
done

会回响

1/5
2/5
3/5
4/5
5/5

是否可以在每次迭代时覆盖先前的回显/打印行?程序应该回显1/5,然后是2/5,而不是1/5,然后是3/5,等等。在程序的最后只剩下一行包含5/5

【问题讨论】:

    标签: bash command-line printf echo


    【解决方案1】:

    这可以通过回车\r来实现:

    for i in {1..5}; do 
        printf "%d/5\r" "$i"
        sleep 1
    done
    

    我添加了对sleep 的调用,以便您可以看到终端更新。

    请注意,您需要在末尾打印一个换行符以避免终端覆盖输出。

    【讨论】:

      【解决方案2】:

      要覆盖一行,请使用回车符\r,并且不要换行。

      试一试,例如:

      for i in {1..5}; do printf '\r%s/5' $i; sleep 0.1; done
      

      添加了sleep 命令,以便您有时间在数字再次更新之前查看它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-12
        • 1970-01-01
        • 2023-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-18
        相关资源
        最近更新 更多