echo $ 是什么意思?做?

Wee*_*ezy 8 linux command-line shell exit-status

在我的终端中,它打印出一个看似随机的数字127。我认为它正在打印一些变量的值并检查我的怀疑,我定义了一个新变量v=4echo $?再次运行给了我0作为输出。

我很困惑,因为我期待 4 是答案。

Prv*_*dav 12

来自man bash

$? 扩展到最近执行的前台管道的退出状态。

echo $?将返回上一个命令的退出状态。你得到的127是最后执行的命令的退出状态,退出时出现了一些错误(很可能)。成功完成的命令退出,退出状态为0(最有可能)。最后一个命令给出了输出,0因为echo $v上一行没有错误地完成。

如果执行命令

v=4
echo $v
echo $?
Run Code Online (Sandbox Code Playgroud)

您将获得如下输出:

4 (from echo $v)
0 (from echo $?)
Run Code Online (Sandbox Code Playgroud)

还可以尝试:

true
echo $?
Run Code Online (Sandbox Code Playgroud)

你会得到0

false
echo $?
Run Code Online (Sandbox Code Playgroud)

你会得到1

true命令什么都不做,它只是以状态代码退出0;并且该false命令也不执行任何操作,它只是以指示失败的状态代码退出(即带有状态代码1)。


sud*_*dus 5

$?在 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"
Run Code Online (Sandbox Code Playgroud)

您可能会问如何在没有 Unix 或 Linux 的情况下运行 bash shell 脚本;-)