我是bash变量概念的新手,我看过一些课程以及如何使用以及何时使用特殊变量(例如$#)来了解在bash脚本中传递了多少参数,以及$ @可以查看提供给Bash脚本的所有参数。 。
但是我听不懂$?他们只是说$?(最近运行的进程的退出状态),我也什么都没有。
我需要一点解释,请举一个例子。
您给出的定义(即最近运行的进程的退出状态)就是这样。但是,如果您不了解命令行中的进程和命令通常是如何工作的,那么我可以理解这可能会有些混乱。
通常,您在命令行上运行的任何命令都将具有退出代码。在C / C ++之类的程序中,您可能会return 0;
在每个main()
例程的末尾看到它的附加内容,而在shell脚本中,您可能会看到它的附加内容exit 0
。这些返回码是向外部环境(在本例中为终端)发出信号的一种主要方式,说明事情要么顺利完成,要么失败了。
这就是$?
发挥作用的地方。Unix系统上的约定是:0
如果一切正常,则使进程返回退出代码;否则,返回非零值。因此,假设我编写了一个简单的主例程,如下所示:
int main(int argc, char* argv[]) {
if (argv[1] == "true") { // not quite right, but fine for examples
return 0;
}
else if (argv[1] == "false") {
return 1;
}
}
如果我在commnand行中将其运行为./a.out true
,则该程序将返回0,并且$?
变量也将设置为0。./a.out false
但是,如果键入,则程序将返回1 $?
并将其也设置为1,这表明出了点问题。
如果您只是在命令行中玩弄,运行命令然后echo $?
查看结果,那么这似乎是多余的,但这在Bash脚本编制中确实变得很有用,您可能希望在其中查看刚运行的命令返回的内容。例如,diff
如果您指定的两个文件没有区别,该命令将返回0,如果不同则返回1。这提供了一种将某些控制流引入程序的巧妙方法,但是您必须要小心,因为它$?
是在运行每个命令之后设置的。
希望对您有所帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句