189

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

例如,C 中的 while 循环:

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

我想编写一个与之等效的 Bash 脚本。但是我通常使用的以及我读过的所有经典示例都表明,是这样的:

while read something;
do
...
done

它对如何执行while(1){}and没有任何帮助break;,它在 C 中定义明确并广泛使用,而且我不必为标准输入读取数据。

任何人都可以帮助我使用与上述 C 代码等效的 Bash 吗?

4

2 回答 2

245

中并没有什么不同bash

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

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


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

于 2013-08-28T13:02:36.623 回答
69
while true ; do
    ...
    if [ something ]; then
        break
    fi
done
于 2013-08-28T13:02:35.363 回答