回显 $ 是什么?做?

回显 $ 是什么?做?

在我的终端中,它打印出一个看似随机的数字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 脚本;-)

相关内容