【发布时间】: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
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
这可以通过回车\r来实现:
for i in {1..5}; do
printf "%d/5\r" "$i"
sleep 1
done
我添加了对sleep 的调用,以便您可以看到终端更新。
请注意,您需要在末尾打印一个换行符以避免终端覆盖输出。
【讨论】:
要覆盖一行,请使用回车符\r,并且不要换行。
试一试,例如:
for i in {1..5}; do printf '\r%s/5' $i; sleep 0.1; done
添加了sleep 命令,以便您有时间在数字再次更新之前查看它们。
【讨论】: