重新抛出异常

异常处理

readConfig() {
    echo "file not found" >&2
    return 3
}

loadSettings() {
    #local and the assignment go apart:
    #$? after local message=$( ) is the code of local, always 0
    local message
    message=$(readConfig 2>&1) || {
        local code=$?
        #any partial processing, then the error goes up
        #with the same code and a longer message
        echo "loadSettings: $message" >&2
        return "$code"
    }
}

code=0
message=$(loadSettings 2>&1) || code=$?
#message is "loadSettings: file not found"
#code is 3

echo "message is $message"
echo "code is $code"