我正在 bash 脚本中测试不同的东西,但遇到了一个问题,我无法得到解释。
我故意写了一个错误的命令,以获得与 0 不同的退出代码,但不知何故,我似乎仍然得到 0。
我正在执行的代码是:
USER_NAME=$(id -uns)
if [[ ${?} -ne 0 ]]
then
echo "Your command failed to execute with exit code ${?}"
exit 1
fi
echo "Your username is ${USER_NAME}"
我的代码的输出是:
id: 未知选项 -- s
尝试“id --help”以获取更多信息。
您的命令执行失败,退出代码为 0
您的用户名是
我猜想它在某种程度上显示了 echo 命令的退出代码?即使如此,如果退出代码为0,为什么会进入if语句呢?
如果是这样,那么我怎样才能让它显示应该显示的实际退出代码?
答案1
在您的代码中,在if
语句中,获取的退出状态打印是测试的退出状态[[ ${?} -ne 0 ]]
。该值$?
始终是最近执行的命令的退出状态,并且测试算作一个命令,至少在将 的值设置$?
为其结果方面是如此。
如果要打印 的退出状态id
,请将其分配给一个值不会改变的变量,
id -uns
err=$?
if [[ $err -ne 0 ]]; then
printf 'id failed with code %d\n' "$err" >&2
exit 1
fi