在Bash中模拟一个do-while循环

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

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

我的脚本的伪代码:

 while [ current_time <= $cutoff ]; do check_if_file_present #do other stuff done 

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

两个简单的scheme:

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

     actions() { check_if_file_present # Do other stuff } actions #1st execution while [ current_time <= $cutoff ]; do actions # Loop execution done 
  2. 要么:

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

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

 while check_if_file_present #do other stuff (( current_time <= cutoff )) do : done 

如果您发现更具可读性,则可以使用continue代替冒号

我改变了testing使用双括号,因为你似乎是比较整数。 在双方括号内,比较运算符(如<=是词法,比较2和10时会得到错误的结果。 这些操作员不在单方括号内工作。

如果您发现更具可读性,则可以使用continue来代替冒号

我的名声太低,不能在丹尼斯·威廉姆森的职位上发表评论。 这个方法模仿了我正在寻找的Do-While循环的方式 – 在动作之后进行条件testing。 我还发现我可以在do语句之后放置一个索引增量(如果需要),而不是continue语句。

 while check_if_file_present #do other stuff (( current_time <= cutoff )) do (( index++ )); done