我想编写一个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吗?


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中工作。