Bash:覆盖以前的echo命令

时间:2016-08-30 14:14:30

标签: bash command-line printf echo

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离开。

2 个答案:

答案 0 :(得分:3)

这可以使用回车\r

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

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

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

答案 1 :(得分:2)

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

尝试,例如:

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

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