这个问题很简单。我可以使用来获得上一个命令的退出代码$?
。但是到底是什么呢?
我认为这不是变量,因为您不能在变量的名称中使用除之外的任何特殊字符_
。
foo?foo=10
将导致错误: foo?foo=10: command not found
那么,如果它不是变量,那是什么?还有其他喜欢的人吗?
这个问题很简单。我可以使用来获得上一个命令的退出代码$?
。但是到底是什么呢?
我认为这不是变量,因为您不能在变量的名称中使用除之外的任何特殊字符_
。
foo?foo=10
将导致错误: foo?foo=10: command not found
那么,如果它不是变量,那是什么?还有其他喜欢的人吗?
Answers:
它是什么?
$?
是一个内置变量,用于存储命令,函数或脚本本身的退出状态。
$?
读取最后执行的命令的退出状态。函数返回后,$?
给出函数中最后执行的命令的退出状态。这是Bash为函数赋予“返回值”的方式。0
成功返回,或者返回1 - 255
错误范围内的整数。
还有其他人喜欢吗?
是的,bash中有几个这样的内置变量。您可以在此处查看列表。请参阅:http : //www.tldp.org/LDP/abs/html/exit-status.html
dash
,ksh
,zsh
,等等)。
$status
用于相同目的
$?
是一个变量,但是是一个特殊变量,这就是为什么允许使用特殊字符的原因。
($?)
扩展到最近执行的前台管道的退出状态。
它不是唯一的,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 $@.
资料来源:
"$*"
不仅是单个单词的所有位置参数,而且是单个单词的第一个字符分隔的所有位置参数IFS
。由于如果不加引号,则结果将进行字段拆分,因此效果$@
与未加引号的情况相同。
$?
是bash中的一个特殊变量,始终保存最后执行的命令的返回/退出代码。
您可以通过运行在终端中查看它echo $?
。
返回码的范围是[0; 255]。
返回码0
通常表示一切正常。
其他值表示错误。大多数应用程序返回1
或自定义值。如果未找到命令,则该变量通常包含127
如果要将此变量设置为特定值,则可以轻松地执行此操作bash -c "exit 5"
以返回例如返回码5
。
setstatus() { return 5; }