函数中的"set -e"

ags*_*mek 13 bash shell set sh

如何set -e在函数中使用语义?

在函数问题中重新打开"set -e",因为它没有被正确回答并且已被接受.

这是一个例子:

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

我想f退出false.

我的实验表明,使用subshel​​l (f)调用在这里没有帮助:

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

移动f出来的if语句当然不会在这种特殊情况下的工作:

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

这对我来说并不那么艰难.

set -e当从if谓词中执行函数时,是否可以打开语义?