Работает ли команда break в условиях цикла while/until в шеллскрипте во всех средах POSIX?

Я могу придумать пару вещей, которые сделают основной сценарий менее загроможденным.

  1. Заставьте ваши функции возвращать ненулевой код выхода, отличный от -, если значение не может быть определено, используя return 1. В качестве альтернативы заставьте их фактически завершить скрипт с помощью exit.

    Заставить их возвращать не -нулевой статус выхода, будет хорошо работать вместе с использованием переменной ссылки на имя:

    set -e
    
    generate_customer_id CUSTOMER_ID "Z"
    

    Здесь мы предполагаем, что generate_customer_idпринимает имя переменной для установки в качестве первого аргумента (она будет использовать typeset -n var="$1"в своем коде и установит var=...something...перед возвратом ). Если ему не удастся получить идентификатор клиента для второго аргумента, будет return 1. Затем основной сценарий завершится из-за set -e(, это заставит оболочку закрыться, как только команда вернет не -ноль ).

  2. В дополнение к вышесказанному или, возможно, вместо него используйте set -u. Это приведет к завершению сценария, как только вы попытаетесь расширить значение переменной, которая в данный момент не установлена.

0
09.02.2021, 10:51
1 ответ

Да.Из спецификацииbreak:

the break utility shall exit from the (…) enclosing for, while, or until loop.

A loop shall enclose a break or continue command if (…) the command is: (…)

  • Contained in a compound-list associated with the loop (either in the compound-list of the loop's do-group or, if the loop is a while or until loop, in the compound-list following the while or until reserved word), and (…)

Размещение breakили continueв условной части цикла необычно и может запутать читателей, но это совместимо с POSIX -.

2
18.03.2021, 22:31

Теги

Похожие вопросы