在我的终端中,它打印出一个看似随机的数字127
。我认为它正在打印某个变量的值,为了检查我的怀疑,我定义了一个新变量v=4
。再次运行echo $?
给了我0
作为输出。
我很困惑,因为我期待 4 是答案。
答案1
从man bash
:
$?扩展到最近执行的前台管道的退出状态。
echo $?
将返回最后一个命令的退出状态。您得到的127
是最后执行的命令的退出状态,该命令退出时出现一些错误(最有可能)。成功完成后的命令退出,退出状态为0
(最有可能)。最后一个命令给出了输出,0
因为echo $v
上一条命令完成后没有出现错误。
如果执行命令
v=4
echo $v
echo $?
您将得到如下输出:
4 (from echo $v)
0 (from echo $?)
还可以尝试:
true
echo $?
你会得到0
。
false
echo $?
你会得到1
。
该true
命令不执行任何操作,只是以状态代码退出0
;并且该false
命令也不执行任何操作,它只是退出并带有指示失败的状态代码(即带有状态代码1
)。
答案2
$?
在 shellscript 中很有用,可以根据前一个命令的工作方式(检查退出状态)来决定要做什么。我们可以预期退出状态是0
当上一个命令有效时(成功完成),否则为非零数值。
演示示例:
#!/bin/bash
patience=3
read -t "$patience" -p "Press 'Enter' if you run Unix or Linux, otherwise press 'ctrl+d' "
status="$?"
if [[ $status -eq 0 ]]
then
echo "That's great :-)"
elif [[ $status -eq 1 ]]
then
echo "(exit status=$status)
You are welcome to try Unix or Linux :-)"
else
echo "(exit status=$status)
You did not answer within $patience seconds. Anyway :-)"
fi
echo "'Unix & Linux' is a question/answer web site for
Unix and Linux operating systems"
您可能会问如何在没有 Unix 或 Linux 的情况下运行 bash shell 脚本;-)