BASH函数中返回和退出之间的区别

是什么之间的区别returnexit的BASH功能相对于退出代码说法?


return从函数返回一个值。 exit放弃当前的shell。

编辑:

根据您对问题的编辑,关于退出代码, return与退出代码无关。 退出代码适用于应用程序/脚本 ,而不是功能。 因此,在这方面,设置脚本退出代码的唯一关键字(可以被调用程序使用$? shell变量捕获的那个) exit

编辑2:

我最后一个提到exit声明引起了一些评论。 为了理解OP,区分了returnexit ,事实上,在程序/ shell脚本的任何给定点上, exit是通过退出代码结束脚本到调用过程的唯一方法。

在shell中执行的每个命令都会产生一个本地“退出代码”:它设置$? 该代码可变,并且可以与if&&和其他运算符一起使用,以有条件地执行其他命令。

这些退出代码(和$?变量的值)由每个命令执行重置。

顺便提一下,由脚本执行的最后一个命令的退出代码被用作调用进程看到的脚本本身的退出代码。

最后,函数在调用时作为关于退出代码的shell命令。 函数的退出代码(函数内)通过使用return来设置。 因此,当函数return 0 ,函数执行终止,给出0的退出码。


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()

我不认为有人真的完全回答了这个问题,因为他们没有描述如何使用这两个问题。 好吧,我认为我们知道exit会杀死脚本,它会被调用,并且您还可以为其指定一个状态,例如退出或退出0或退出7等等。 这可以用来确定脚本如何被其他脚本调用时被迫停止等。足够退出。

被调用时返回将返回指定的值以指示函数的行为,通常为1或0.例如:

    #!/bin/bash
    isdirectory() {
      if [ -d "$1" ]
      then
        return 0
      else
        return 1
      fi
    echo "you will not see anything after the return like this text"
    }

像这样检查:

    if isdirectory $1; then echo "is directory"; else echo "not a directory"; fi

或者像这样:

    isdirectory || echo "not a directory"

在这个例子中,测试可以用来指示目录是否被找到。 注意返回后的任何内容都不会在函数中执行。 0是true,但shell中的false是1,与其他的prog langs不同。

有关功能的更多信息,请访问:http://www.linuxjournal.com/content/return-values-bash-functions

注意:isdirectory函数仅用于说明目的。 这不应该是你如何在一个真实的脚本中执行这样的选项。

链接地址: http://www.djcxy.com/p/57321.html

上一篇: Difference between return and exit in BASH functions

下一篇: Git: fetch a specific object from a remote