在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:
-
在while循环之前执行一次代码
actions() { check_if_file_present # Do other stuff } actions #1st execution while [ current_time <= $cutoff ]; do actions # Loop execution done
-
要么:
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