如何摆脱Bash的循环?

时间:2013-08-28 12:59:11

标签: bash shell while-loop

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

2 个答案:

答案 0 :(得分:139)

bash并没有那么不同。

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

:是no-op命令;它的退出状态始终为0,因此循环运行直到done被赋予非零值。


有许多方法可以设置和测试done的值以退出循环;我上面展示的那个应该适用于任何POSIX兼容的shell。

答案 1 :(得分:48)

while true ; do
    ...
    if [ something ]; then
        break
    fi
done