我正在bash中运行一个无限while循环,它具有一个计数元素。
while :
do
#stuff including counting
trap break int
done
这在大多数情况下都是我想要的。当我按Ctrl + C时,循环停止,但脚本继续。但是,循环在循环中间停止,这意味着最终计数不正确。
有没有一种方法可以使循环最终结束?
答案 0 :(得分:4)
您可以设置标志并在设置标志时在指定位置中断循环,而无需执行break
。请注意,在循环中,循环头也可以看作是循环的尽头。
state=run
trap 'state=end' int
while [ "$state" = run ]
do
# stuff
done
如果您想在中间用途中打破某个地方
state=run
trap 'state=end' int
while :
do
# stuff
[ "$state" = end ] && break
# more stuff
done
您可以通过将# stuff
替换为for i in {1..20}; do printf .; sleep 0.1; done; echo
来安静地测试行为:
正如我们在上面的剪辑中看到的那样,外循环将完成其当前迭代(# stuff
)直到最后。