Macos 为什么';t`exit$?`在Bash中是否按预期工作?

Macos 为什么';t`exit$?`在Bash中是否按预期工作?,macos,bash,Macos,Bash,我试图在脚本中传播退出代码,但当我退出$?时,它似乎总是以0退出 应要求: <some command> if [[ ! -z "$?" ]] then echo "Some error" exit $? fi 如果[!-z“$?”]] 然后 回应“一些错误” 退出$? fi 只要写下以下内容: your_command || exit …或者,如果要记录: your_command || { retval=$?; echo "Failed" >&

我试图在脚本中传播退出代码,但当我退出$?时,它似乎总是以0退出

应要求:

<some command>
if [[ ! -z "$?" ]]
then
    echo "Some error"
    exit $?
fi

如果[!-z“$?”]]
然后
回应“一些错误”
退出$?
fi
只要写下以下内容:

your_command || exit
…或者,如果要记录:

your_command || { retval=$?; echo "Failed" >&2; exit "$retval"; }
由于
exit
使用
$?
作为默认退出状态,因此前者是最简单、最短的方法

echo "Some error"
exit $?
$?
echo
命令的退出状态,它几乎总是0

认为
$?
非常脆弱;任何命令都会把它击垮

而且,
-z
是错误的测试;它测试其参数是否为空字符串,而不是它是否具有值
0

如果要使用命令的退出状态晚于下一个命令的退出状态,请将其保存:

<some command>
status=$?
if [[ "$status" -ne 0 ]]
then
    echo "Some error" 1>&2
    exit $status
fi

状态=$?
如果[[“$status”-ne 0]]
然后
回显“某些错误”1>&2
退出$status
fi

您的脚本是什么样子的?仅供参考,
exit
使用的默认状态是
$?
,因此
exit$?
是完全冗余的。我们不可能在不查看脚本的情况下回答此问题。很有可能它正在进行日志记录或为
$?
设置新值的操作
test-z$?
将始终退出false。总是。不管值是什么——因为
$?
永远不会是空字符串,这是
test-z
检查的唯一内容。