$是什么意思?是指在 Bourne shell 中尝试执行无效命令后立即执行?

What does $? mean immediately after trying to execute an invalid command in the Bourne shell?

我知道 $? 表示最后执行的命令的 return 值。我很好奇;如果命令无效,那么 $? 会是什么?

127。这是什么意思?为什么是127

> echo a
a
> echo $?
0
> invalidcommandasdf
invalidcommandasdf: not found
> echo $?
127

$?给出最后执行的存在状态码command/process。 127 状态代码表示 未找到命令

更多详情:bash-shell-exit-status/

“$?”的主要用途是检查最后一个 运行 命令的退出值是真还是假。如果最后一个 运行 命令为真,则输出为“0”或“1”,其中返回“0”,如果为假,则返回“1”。

对于未知命令,您将得到如您所示的输出。 您可以通过简单地使用随机字符串 (sajdgh / uytwegf) 作为无法识别的命令来尝试此操作,您会看到得到不同的输出。

然而,此命令的主要用途是检查上次使用的命令的逻辑状态。启动 ls 并查看 "echo $?" 的输出将为“0”,现在只需尝试 'cat unknown.txt'(考虑到您实际上没有名为 'unknown.txt' 的文件),您将获得输出为“1”

退出状态有双重作用:它可能 return 来自 程序的 信息,但也可能 return 来自 任何人的 return 信息]运行关于程序如何退出的程序。虽然从理论上讲,一个程序可以在 运行ge 0 到 255 之间有任何退出代码,但其中许多代码被赋予了特殊含义,例如 POSIX 标准,并且不能被使用程序本身。

例如,

126 和 127 供 shell(或其他命令运行器)运行 命令使用。 127 表示找不到命令,126 表示找到命令,但无法执行。

任何大于128的退出状态表示程序由于信号退出:129由于信号1退出,130由于信号2等。通常,128 + k表示由于信号k退出.

(我不确定 128 本身是否为任何特定的东西保留。)

实际上,这意味着您的 命令不应显式使用任何大于 125 的退出代码。这通常不成问题;大多数命令不需要区分 125 个不同的错误(0,当然,意味着它没有错误地退出。)curl 是一个使用 lot 的程序示例不同的代码,但即使它只使用 1 到 90 之间的 大多数 个可用值。