首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Bash中模拟do-while循环

在Bash中模拟do-while循环
EN

Stack Overflow用户
提问于 2013-05-11 03:49:01
回答 4查看 207.4K关注 0票数 179

在Bash中模拟do-while循环的最佳方法是什么?

我可以在进入while循环之前检查条件,然后继续重新检查循环中的条件,但这是重复的代码。有没有更干净的方法?

我的脚本的伪代码:

代码语言:javascript
复制
while [ current_time <= $cutoff ]; do
    check_if_file_present
    #do other stuff
done

如果在$cutoff时间之后启动,则不会执行check_if_file_present,而do-while将执行。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-11 03:59:06

两个简单的解决方案:

  1. 在while循环之前执行一次代码

actions() { check_if_file_present # Do other stuff } actions #other while current_time <= $cutoff;do actions # Loop execution done

  • Or:

while:;do actions [ current_time <= $cutoff ] || break done

票数 276
EN

Stack Overflow用户

发布于 2013-05-11 06:10:39

将循环的主体放在while之后和测试之前。while循环的实际主体应该是no-op。

代码语言:javascript
复制
while 
    check_if_file_present
    #do other stuff
    (( current_time <= cutoff ))
do
    :
done

如果您觉得continue更具可读性,您可以使用它来代替冒号。您还可以插入仅在两次迭代之间运行的命令(而不是在第一次迭代之前或最后一次迭代之后),例如echo "Retrying in five seconds"; sleep 5。或打印值之间的分隔符:

代码语言:javascript
复制
i=1; while printf '%d' "$((i++))"; (( i <= 4)); do printf ','; done; printf '\n'

我更改了测试以使用双括号,因为您似乎是在比较整数。例如,在双方括号内,<=等比较运算符是词法运算符,在比较2和10时会给出错误的结果。这些运算符在单方括号内不起作用。

票数 162
EN

Stack Overflow用户

发布于 2020-08-06 03:08:16

此实现:

while duplication

  • Doesn't没有代码需要额外的functions()

  • Doesn't取决于循环的“”部分中代码的返回值:

代码语言:javascript
复制
do=true
while $do || conditions; do
  do=false
  # your code ...
done

它也使用读取循环,跳过第一次读取:

代码语言:javascript
复制
do=true
while $do || read foo; do
  do=false

  # your code ...
  echo $foo
done
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16489809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档