尽管有250多个否决的答案,但为什么您仍然应该关心我所说的话
这并不是说0 = true
和1 = false
。它是:零表示无故障(成功) ,非零表示故障(类型N)。
虽然所选答案从技术上讲是“ true”,但请不要return 1
在代码中输入**来表示false。它将有一些不幸的副作用。
- 有经验的开发人员会发现您是业余爱好者(出于以下原因)。
- 有经验的开发人员不这样做(出于以下所有原因)。
- 这容易出错。
- 即使是经验丰富的开发人员,也可能将0和1分别误认为是false和true(由于上述原因)。
- 它需要(或将鼓励)多余和荒谬的评论。
- 实际上,它没有隐式返回状态有用。
学习一些bash
在bash的手册说(重点煤矿)
返回[n]
使Shell函数停止执行并将值n返回给其调用方。如果未提供n,则返回值是函数中最后执行的命令的退出状态。
因此,我们不必永远使用0和1来表示True和False。他们这样做的事实本质上是微不足道的知识,仅对调试代码,面试问题和引起新手的想法有用。
bash手册还说
否则,函数的返回状态是最后执行的命令的退出状态
bash手册还说
($?)扩展为最近执行的前台管道的退出状态。
等等 管道?让我们再翻一遍bash手册。
流水线是由一个或多个控制运算符'|'分隔的命令序列 或“ |&”。
是。他们说1条命令是一条管道。因此,所有这三个引号都说相同的话。
我的答案
因此,虽然@Kambus演示了具有如此简单的功能,但没有return
根本不需要。与大多数将要阅读此书的人的需求相比,我认为这是不切实际的简单。
为什么 return
呢
如果一个函数要返回其最后一个命令的退出状态,为什么要使用它return
呢?因为它导致函数停止执行。
在多种情况下停止执行
01 function i_should(){
02 uname="$(uname -a)"
03
04 [[ "$uname" =~ Darwin ]] && return
05
06 if [[ "$uname" =~ Ubuntu ]]; then
07 release="$(lsb_release -a)"
08 [[ "$release" =~ LTS ]]
09 return
10 fi
11
12 false
13 }
14
15 function do_it(){
16 echo "Hello, old friend."
17 }
18
19 if i_should; then
20 do_it
21 fi
我们这里有...
Line 04
是一个显式的[-ish]返回true,因为&&
仅当LHS为true时才执行RHS
行09
返回与行状态匹配的真或假08
行13
因行而返回false12
(是的,可以打高尔夫球,但是整个示例都是人为设计的。)
另一个常见的模式
# Instead of doing this...
some_command
if [[ $? -eq 1 ]]; then
echo "some_command failed"
fi
# Do this...
some_command
status=$?
if ! $(exit $status); then
echo "some_command failed"
fi
请注意,设置status
变量如何使的含义神秘化$?
。(当然,您知道这$?
是什么意思,但是知识渊博的人总有一天会需要Google的帮助。除非您的代码进行高频交易,否则请表现出一些爱心,并设置变量。)但是,真正的收获是“如果不存在状态”或相反的“如果退出状态”可以大声读出并解释其含义。但是,最后一个可能有点过于雄心勃勃,因为看到这个词exit
可能会让您认为它正在退出脚本,而实际上却正在退出$(...)
子外壳。
**如果您绝对坚持使用return 1
false,那么建议您至少使用return 255
代替。这将导致您未来的自我,或任何其他必须维护您的代码的开发人员质疑“为什么是255?” 这样,他们至少会引起注意,并更有机会避免犯错。
function
关键字myfun() {...}
就足够了