Рассмотрим код:КШ errexit на условное исполнение
set -ex
for a in 1 2 3; do
[ $a == 1 ] || false
done
Ожидаемый результат:
+ [ 1 == 1 ]
+ [ 2 == 1 ]
+ false
Однако я получаю:
+ [ 1 == 1 ]
+ [ 2 == 1 ]
+ false
+ [ 3 == 1 ]
+ false
По какой-то причине KSH решает не выходить после false
на второй итерации.
Выполнение этого сценария через bash дает ожидаемые результаты.
Интересно, что я могу убедить Ksh обеспечить ожидаемые результаты, изменяя код:
set -ex
for a in 1 2 3; do
[ $a == 1 ] || false
true
done
Что на поверхности, все, что я делаю, добавив true
команду, которая, как предполагается, чтобы эффективно делать ничего ,
Моя версия КШ (по умолчанию в OpenBSD 6.0) является: @(#)PD KSH v5.2.14 99/07/13.2
Я хотел, чтобы убедиться, что это не то, что я пропускаю, прежде чем я решил сообщить об этом как об ошибке.
Хотя эта ссылка может ответить на этот вопрос, то лучше включить основные части ответа здесь и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. – Marusyk
Весьма маловероятно, поскольку первый из них является архивом списков рассылки, а второй - официальным журналом исходного кода: ^) Тем не менее, спасибо за информацию - я это помню. – rjc