Как получить код возврата команды в выражении короткого замыкания

После выражения:

command1 | command2

Я могу получить первые команды выхода из состояния через ${PIPESTATUS[0]}

Есть ли эквивалент для выражений в форме:

command3 && command4 || command5

Я хотел бы получить код выхода команды 3:

command3 && command4 || command5
retval=${SHORTCIRCUIT[0]}     # how to get this value?

Желательно без создания временных файлов.

1 ответ

Решение

Разработка подхода Devnull приводит к

{ c3=0; command3 || c3=$? && false; } && command4 || command5
echo $c3

, Потому что каждый command можно заменить на

{ c=0; command || c=$? && false; }

(при условии, что c изначально не устанавливается, если выполняется условно), это легко расширяется.

Другие вопросы по тегам