2016-08-30 84 views
-1
for i in {1..5};do 
    echo $i/5 
done 

将回声击:覆盖先前echo命令

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

是否有可能覆盖在每次迭代之前的回荡/印刷行?该程序应回显1/5,然后2/5而不是1/5,然后3/5等。在程序结束时,只应该留下一行包含5/5的行。

回答

2

这可以用回车\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命令,让你有时间看这些数字,他们再次更新之前。