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

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

这个问题很简单。我可以使用 获取上一个命令的退出代码$?。但它到底是什么?

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

foo?foo=10

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

那么如果它不是变量,那它是什么?还有其他类似的变量吗?

答案1

它是什么?

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

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

还有其他人也类似吗?

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

答案2

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

这不是唯一的一个,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 $@.

资料来源:

答案3

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

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

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

如果您想将此变量设置为特定值,您可以轻松地通过bash -c "exit 5"返回来完成此操作,例如返回代码5

答案4

$?特别的shell 参数(变量)。

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

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

你可以读这个获得有关变量的更多想法。

相关内容