如何在 Bash 中打破循环?

How to break out of a loop in Bash?

提问人:lulyon 提问时间:8/28/2013 最后编辑:codeforesterlulyon 更新时间:11/6/2020 访问量:307107

问:

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

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

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

我想编写一个与此等效的 Bash 脚本。但是我通常使用的,正如我阅读的所有经典例子所表明的那样,是这样的:

while read something;
do
...
done

它没有提供关于如何执行 和 的帮助,这在 C 中定义明确并广泛使用,我不必读取 stdin 的数据。while(1){}break;

谁能帮我使用与上述 C 代码等效的 Bash ?

bash shell while循环

评论


答:

84赞 lurker 8/28/2013 #1
while true ; do
    ...
    if [ something ]; then
        break
    fi
done
304赞 chepner 8/28/2013 #2

在.bash

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

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


您可以通过多种方式设置和测试 的值以退出循环;我上面展示的那个应该可以在任何与 POSIX 兼容的 shell 中工作。workdone