这个问题很简单。我可以使用来获得上一个命令的退出代码$?。但是到底是什么呢?
我认为这不是变量,因为您不能在变量的名称中使用除之外的任何特殊字符_。
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; }