什么是`$?`? 它是变量吗?

问题非常简单。 我可以使用$?获取上一个命令的退出代码$? 。 但究竟是什么呢?

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

 foo?foo=10 

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

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

它是什么?

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

$? 读取上次执行的命令的退出状态。 函数返回后, $? 给出函数中执行的最后一个命令的退出状态。 这是Bash赋予函数“返回值”的方式。 成功时返回0 ,或者出错时返回1 - 255的整数。

还有其他人喜欢吗?

是的,bash中有几个这样的内置变量。 你可以在这里看到一个列表。 请参阅: 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]开头)。

简而言之, $? 是一个特殊的变量( 并且有很多这些变量)可以被认为是shell本身的内部特征,它提供了前一个命令的退出代码(无论是成功还是失败)。

您可以阅读此内容以了解有关变量的更多信息。

$? 是bash中的一个特殊变量,它始终包含上次执行的命令的返回/退出代码

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

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

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