Bash函数中的返回语句和退出语句在退出代码方面有什么区别?


当前回答

首先,return是一个关键字,exit是一个函数。

也就是说,这里有一个最简单的解释。

返回

它从函数中返回一个值。

exit

它退出或放弃当前shell。

其他回答

如果将Bash脚本转换为函数,则通常将退出N替换为返回N。调用该函数的代码将把返回值视为子进程的退出代码。

在函数中使用exit将强制整个脚本结束。

在其他一些答案中添加一个可操作的方面:

两者都可以给出退出代码- default或由函数定义,并且唯一的“default”是零,表示成功退出和返回。任何状态都可以有一个自定义数字0-255,包括成功。

返回通常用于运行在当前shell中的交互式脚本,称为with。例如Script.sh,它只是将您返回到调用shell。然后,调用shell可以访问返回代码- $?给出定义的返回状态。 在这种情况下,Exit还会关闭shell(包括SSH连接,如果这是您的工作方式的话)。

如果脚本是可执行的,并且从另一个脚本或shell调用并且在子shell中运行,那么Exit是必要的。然后退出码可以被调用shell访问-在这种情况下return会给出一个错误。

记住,函数是脚本内部的,通常使用return语句返回调用它们的地方。调用外部脚本完全是另一回事,脚本通常以退出语句结束。

“Bash函数中关于退出代码的返回语句和退出语句之间”的差异非常小。两者都返回一个状态,而不是本身的值。状态为0表示成功,而任何其他状态(1到255)表示失败。return语句将从调用它的地方返回到脚本,而exit语句将从遇到它的地方结束整个脚本。

return 0  # Returns to where the function was called.  $? contains 0 (success).

return 1  # Returns to where the function was called.  $? contains 1 (failure).

exit 0  # Exits the script completely.  $? contains 0 (success).

exit 1  # Exits the script completely.  $? contains 1 (failure).

如果函数只是结束而没有返回语句,则最后执行的命令的状态将作为状态代码返回(并将放置在$?)

记住,return和exit返回一个从0到255的状态码,可用$?你不能把任何东西塞进状态码(例如,返回“cat”);这是行不通的。但是,脚本可以通过使用状态码返回255个不同的失败原因。

您可以设置调用脚本中包含的变量,或者在函数中回显结果,并在调用脚本中使用命令替换;但是return和exit的目的是传递状态码,而不是像C这样的编程语言中所期望的值或计算结果。

Return将导致当前函数超出作用域,而exit将导致脚本在调用它的地方结束。下面是一个示例程序来帮助解释这一点:

#!/bin/bash

retfunc()
{
    echo "this is retfunc()"
    return 1
}

exitfunc()
{
    echo "this is exitfunc()"
    exit 1
}

retfunc
echo "We are still here"
exitfunc
echo "We will never see this"

输出

$ ./test.sh
this is retfunc()
We are still here
this is exitfunc()

简单来说(主要针对编程新手),我们可以说:

    `return`: exits the function,
    `exit()`: exits the program (called as process while running)

如果你观察一下,这是非常基本的,但是…

    `return`: is the keyword
    `exit()`: is the function