$有什么好处?猛扑

坦率的标记:

我是bash变量概念的新手,我看过一些课程以及如何使用以及何时使用特殊变量(例如$#)来了解在bash脚本中传递了多少参数,以及$ @可以查看提供给Bash脚本的所有参数。 。

但是我听不懂$?他们只是说$?(最近运行的进程的退出状态),我也什么都没有。

我需要一点解释,请举一个例子。

mppombo5:

您给出的定义(即最近运行的进程的退出状态)就是这样。但是,如果您不了解命令行中的进程和命令通常是如何工作的,那么我可以理解这可能会有些混乱。

通常,您在命令行上运行的任何命令都将具有退出代码。在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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章