Я могу придумать пару вещей, которые сделают основной сценарий менее загроможденным.
Заставьте ваши функции возвращать ненулевой код выхода, отличный от -, если значение не может быть определено, используя return 1
. В качестве альтернативы заставьте их фактически завершить скрипт с помощью exit
.
Заставить их возвращать не -нулевой статус выхода, будет хорошо работать вместе с использованием переменной ссылки на имя:
set -e
generate_customer_id CUSTOMER_ID "Z"
Здесь мы предполагаем, что generate_customer_id
принимает имя переменной для установки в качестве первого аргумента (она будет использовать typeset -n var="$1"
в своем коде и установит var=...something...
перед возвратом ). Если ему не удастся получить идентификатор клиента для второго аргумента, будет return 1
. Затем основной сценарий завершится из-за set -e
(, это заставит оболочку закрыться, как только команда вернет не -ноль ).
В дополнение к вышесказанному или, возможно, вместо него используйте set -u
. Это приведет к завершению сценария, как только вы попытаетесь расширить значение переменной, которая в данный момент не установлена.
Да.Из спецификации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 -.