Bash函数中的返回语句和退出语句在退出代码方面有什么区别?
当前回答
首先,return是一个关键字,exit是一个函数。
也就是说,这里有一个最简单的解释。
返回
它从函数中返回一个值。
exit
它退出或放弃当前shell。
其他回答
我认为没有人真正完全回答了这个问题,因为他们没有描述这两者是如何使用的。我想我们知道exit会终止脚本,不管它在哪里被调用你也可以给它分配一个状态比如exit, exit 0, exit 7等等。这可以用来确定如果被另一个脚本调用,脚本是如何被迫停止的,等等。到此为止。
Return,当调用时,将返回指定的值来指示函数的行为,通常是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"
在本例中,可以使用测试来指示是否找到了目录。注意,函数中不会执行return之后的任何内容。0在shell中为真,但false为1,这与其他编程语言不同。
有关函数的更多信息:从Bash函数返回值
注意:isdirectory函数仅用于教学目的。这不应该是你在真正的脚本中执行这样的选项
有时,使用。或来源。
. a.sh
如果在a.s sh中包含了一个exit,它不仅会终止脚本,还会结束shell会话。
如果在a.h sh中包含一个返回值,它就会停止处理脚本。
如果将Bash脚本转换为函数,则通常将退出N替换为返回N。调用该函数的代码将把返回值视为子进程的退出代码。
在函数中使用exit将强制整个脚本结束。
简单来说(主要针对编程新手),我们可以说:
`return`: exits the function,
`exit()`: exits the program (called as process while running)
如果你观察一下,这是非常基本的,但是…
`return`: is the keyword
`exit()`: is the function
记住,函数是脚本内部的,通常使用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这样的编程语言中所期望的值或计算结果。