如何打破一个循环在Bash?

我想编写一个Bash脚本来处理文本,这可能需要一个while循环。

例如,C语言中的while循环:

int done = 0;
while(1) {
...
if(done) break;
}

我想写一个与之等价的Bash脚本。但我通常使用的,正如我读过的所有经典例子所显示的,是这样的:

while read something;
do
...
done

它没有提供关于如何执行while(1){}break;的帮助,这是在C中定义良好并广泛使用的,并且我不需要为stdin读取数据。

有人能帮我写一个与上面的C代码相当的Bash吗?

275452 次浏览
while true ; do
...
if [ something ]; then
break
fi
done

bash中并没有什么不同。

workdone=0
while : ; do
...
if [ "$workdone" -ne 0 ]; then
break
fi
done

:是no-op命令;它的退出状态总是0,所以循环运行直到workdone被赋予一个非零值。


为了退出循环,有很多方法可以设置和测试workdone的值;我上面展示的程序应该可以在任何posix兼容的shell中工作。