当前位置: 首页>>技术教程>>正文


什么是“$?”?它是一个变量吗?

,

问题描述

这个问题很直接。我可以使用 $? 获取上一个命令的退出代码。但究竟是什么呢?

我不认为它是一个变量,因为除了 _ 之外,变量名中不能有任何特殊字符。

foo?foo=10

将导致错误:foo?foo=10: command not found

那么如果它不是一个变量,它是什么?还有其他人喜欢吗?

最佳办法

它是什么?

$? 是一个 内置 变量,用于存储命令、函数或脚本本身的退出状态。

$? 读取最后执行的命令的退出状态。函数返回后,$? 给出函数中执行的最后一条命令的退出状态。这是 Bash 给函数一个“返回值”的方式。它在成功时返回 0 或在错误时返回 1 - 255 范围内的整数。

有其他人也喜欢吗?

是的,bash 中有几个这样的 内置 变量。您可以看到一个列表 here 。参考:http://www.tldp.org/LDP/abs/html/exit-status.html

次佳办法

$? 是一个变量,但很特殊,这就是为什么允许使用特殊字符的原因。 ($?) 扩展到最近执行的前台管道的退出状态。

它不是唯一的,shell 对几个参数进行了特殊处理。这些参数只能被引用;不允许分配给他们:

Variable    Meaning
$0          Filename of script
$1          Positional parameter #1
$2 - $9     Positional parameters #2 - #9
${10}       Positional parameter #10
$#          Number of positional parameters
"$*"        All the positional parameters (as a single word) *
"$@"        All the positional parameters (as separate strings)
${#*}       Number of positional parameters
${#@}       Number of positional parameters
$?          Return value
$$          Process ID (PID) of script
$-          Flags passed to script (using set)
$_          Last argument of previous command
$!          Process ID (PID) of last job run in background

* Must be quoted, otherwise it defaults to $@.

资料来源:

第三种办法

$? 是一个特殊的 shell 参数(变量)。

一般来说,所有用户定义的变量必须仅使用字符类 [:alnum:] 中的字符命名,即 [a-zA-Z0-9_] (也不能以 [0-9] 开头)。

简而言之, $? 是一个特殊变量 ( and there are quite a few of these ),可以将其视为 shell 本身的内部特征,它提供了前一个命令的退出代码(无论是成功还是失败)。

您可以通过 read this 获得更多关于变量的信息。

第四种办法

$? 是 bash 中的一个特殊变量,它始终保存最后执行的命令的返回/退出代码。

您可以通过运行 echo $? 在终端中查看它。

返回代码在范围 [0; 255]。返回码 0 通常意味着一切正常。其他值表示错误。大多数应用程序返回 1 或自定义值。如果没有找到命令,变量通常包含 127

如果您想将此变量设置为特定值,您可以使用 bash -c "exit 5" 轻松执行此操作以返回例如返回代码 5

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/12349.html,未经允许,请勿转载。