Подтвердить что ты не робот

"set -e" в функции

Как использовать семантику set -e в функции?

Это снова открывается "set -e" в вопросе функции, поскольку он не получил правильного ответа и уже принят.

Вот пример:

#!/bin/bash
set -exo pipefail
f() {
    echo a
    false
    echo Should NOT get HERE
}
if f ; then
    true
fi

Мне бы хотелось f выйти с false.

Мои эксперименты показывают, что использование вызова subshell (f) здесь не помогает:

#!/bin/bash
set -exo pipefail
f() {
    echo a
    false
    echo Should NOT get HERE
}
g() {   
    ( f )
}
if g ; then
    true
fi

Перемещение f из оператора if выполняет задание, конечно, в данном конкретном случае:

#!/bin/bash
set -exo pipefail
f() {
    echo a
    false
    echo Should NOT get HERE
}
f
if [ "$?" != "0" ] ; then
    true
fi

Это не очень помогает мне.

Можно ли включить семантику set -e, когда функция выполняется из предиката if?

4b9b3361