Эмуляция цикла do-while в Bash
каков наилучший способ эмуляции цикла do-while в Bash?
Я мог бы проверить состояние перед входом в while
цикл, а затем продолжить повторную проверку условия в цикле, но это дублированный код. Есть ли более рациональный способ?
псевдо код моего скрипта:
while [ current_time <= $cutoff ]; do
check_if_file_present
#do other stuff
done
это не делает check_if_file_present
Если запущен после $cutoff
время и сделать хотя бы.
3 ответа:
два простых решения:
выполнить код один раз перед циклом 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
поместите тело вашего цикла после
while
и перед тестом. Фактическое телоwhile
цикл должен быть no-op.while check_if_file_present #do other stuff (( current_time <= cutoff )) do : done
вместо двоеточия можно использовать
continue
Если вы найдете, что более читаемымЯ изменил тест, чтобы использовать двойные скобки, так как вы, кажется, сравниваете целые числа. Внутри двойных квадратных скобок, операторы сравнения, такие как
<=
являются лексическими и дадут неправильный результат при сравнении 2 и 10, например. Те операторы не работают внутри одиночных квадратных скобок.
вместо двоеточия, вы можете использовать продолжить, если вы найдете, что более читаемым
моя репутация слишком низка, чтобы оставить комментарий на пост Денис Уильямсон. Этот метод имитирует способ выполнения циклов Do-While, которые я искал, чтобы иметь тест состояния после действий. Я также обнаружил, что могу разместить приращение индекса (при необходимости) после оператора do вместо оператора continue.
while check_if_file_present #do other stuff (( current_time <= cutoff )) do (( index++ )); done