如何突破Bash的循环?


150

我想编写一个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等效项帮助我吗?

Answers:


189

在中没有什么不同bash

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

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


您可以通过多种方法设置和测试值done以退出循环。我上面显示的代码应该可以在任何POSIX兼容的shell中使用。


可以done用作变量名吗?这是一个shell关键字... Kinda至少令人困惑。
Michael Dorst

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.