为什么 if [ ...something... ];那么 echo "Exit status is $?" 总是发出 0?

Why does if [ ...something... ]; then echo "Exit status is $?" always emit 0?

在bash中输出退出状态的正确方法是什么?据我所知,$?调用的退出状态对应的是最后执行命令的状态。

正在处理的脚本对作为参数提供的文件进行了一些条件检查,例如,检查是否有任何文件被命名或文件是否存在。

所以我有这样的条件语句:

if [ $# -eq 0 ] ; then
     echo "No file name(s) given! \nExit status=$?"
     exit

if [ ! -e "$fName" ] ; then
     echo "$fName does not exist! \nExit status=$?"
     exit 

但是这些 return 退出状态为 0。我什至不完全确定哪种退出代码适用于每种情况,但我认为基于 this。我应该将 1 硬编码到条件语句中还是更改逻辑以便 unix 输出错误代码?另外,我在上面的示例中得到的 0 是什么命令的退出代码?

在这两种情况下,最后执行的命令是 [,它以 0 状态 ("success") 退出,使您进入 "true" 块。

是的,您需要为 exit 命令指定一个非零退出代码。

迂腐地 "unix" 不输出错误代码:shell 运行 您的脚本以指定的状态退出。