Описание тега mac
От человека Баша
:
набор -у
- Лечить неопределенные переменные и параметры, кроме специальной параметров
"@"
и"*"
как ошибка при выполнении параметра расширения. Если расширение покушение на неопределенная переменная или параметр, оболочка печатает сообщение об ошибке, и, если не-я
nteractive, выходит с ненулевым статусом.
- Лечить неопределенные переменные и параметры, кроме специальной параметров
В POSIX утверждает, что, в случае расширения ошибку, не-интерактивной оболочки должны выйти для расширения связан с оболочкой специальные встроенные (который является различие Баш
регулярно игнорирует в любом случае, а так может быть уже неактуально) или другую программу, кроме того.
- Последствия консоли ошибок:
- К расширению ошибки является тот, который возникает, когда корпус расширения, определенные в слово экспансии осуществляются (например,
"${х!Г}"
, потому что!
не является допустимым оператором); реализация могут рассматривать их как синтаксические ошибки, если она способна обнаружить их во время лексического анализа, а не при расширении. - [А]н интерактивная оболочка должна написать диагностическое сообщение в стандартный поток ошибок без выхода.
- К расширению ошибки является тот, который возникает, когда корпус расширения, определенные в слово экспансии осуществляются (например,
Также от человека Баша
:
ловушка ... подстраховаться
- Если sigspec является заблуждаться, команда арг выполняется всякий раз, когда газопровод (которая может состоять из одной простой команды), списком или составная команда возвращает ненулевой статус выхода, и при соблюдении следующих условий:
- На подстраховались ловушка не выполняется, если не команда входит в список команд сразу после
во время
илидо
сайта... - ...часть теста в
случае, если
заявление... - ...части команды выполняются в
&&
или||
списка, за исключением команды после финального&&
или||
... - ...любую команду в трубопроводе, но последнее...
- ...или если команды возвращают значение инвертируется с помощью
!
.
- На подстраховались ловушка не выполняется, если не команда входит в список команд сразу после
- Эти же условия соблюдаются errexit
-электронный
вариант.
- Если sigspec является заблуждаться, команда арг выполняется всякий раз, когда газопровод (которая может состоять из одной простой команды), списком или составная команда возвращает ненулевой статус выхода, и при соблюдении следующих условий:
Обратите внимание, что подстраховаться ловушка всех о оценке некоторых других команд вернуться. Но когда расширение ошибка возникает, нет команды выполнить, чтобы вернуть все. В вашем примере, Эхо
никогда не произойдет - потому что в то время как оболочка анализирует и расширяет свои аргументы, он обнаружил -у
nset переменной, которая была указана на явную оболочку параметр, чтобы вызвать немедленный выход из текущего, скриптовые оболочки.
И поэтому выход из ловушки, если таковые имеются, выполняется, и снаряд выходит с диагностическое сообщение и статус выхода, кроме 0 - точно так, как это нужно делать.
Что касается РЧ: 0 штука, я ожидал, что версия, конкретный глюк какой-то - наверное, связано с двумя триггерами на выходе , происходящие одновременно и в одной другой код выхода (что не должно произойти). И вообще, с вверх-к-дата Баш
бинарный как установлено Пакман
:
баш <<\в
е "параметры оболочки:\т$-\н"
ловушка 'Эхо "выход (РЦ: $?)"' Выход
комплект -ЕС
Эхо ${UNSET_VAR}
В
Я добавил в первой строке, так что вы можете увидеть, что оболочка условиях те из сценария оболочки - это не интерактивные. Вывод:
варианты раковины: НВ
Баш: строка 4: UNSET_VAR: несвязанных переменных
Выход (код: 1)
Вот несколько важных заметок из последней записи:
- Исправлена ошибка, приводившая асинхронных команд не установлен
$?
правильно. - Исправлена ошибка, которая вызвала сообщения об ошибках, генерируемые расширением ошибокв
для
команды, чтобы иметь неправильный номер строки. - Исправлена ошибка, приводившая радиоразведки и на которых он слушал , чтобы не быть
ловушкой
pable в асинхронном подуровень команды. - Исправлена проблема с обработки прерываний, которые вызвали второго и последующих радиоразведки быть проигнорированы интерактивную оболочку.
- Оболочка не блокируют поступление сигналов во время работы
ловушки
обработчики для этих сигналов, и позволяет большинстволовушку
обработчики будут выполняться рекурсивно (работаетловушка
обработчики, в то время какловушка
обработчик выполняется).
Я думаю, что это последний или первый, что имеет самое непосредственное отношение - или, возможно, сочетание этих двух. В ловушку
обработчик является по своей природе асинхронная , потому что вся его работа-ждать и обработки асинхронных сигналов. И вы два триггера одновременно с ЕС
и $UNSET_VAR
.
И поэтому, возможно, вам следует просто обновить, но если вы любите себя, вы будете делать это с другой оболочке в целом.