一个脚本里遇到的,这个函数的写法是:
inner_stop(){
local pid=$( get_service_pid )
[ ! -z "$pid" ] && kill $pid
}
在调用完这个函数的地方需要检查一下它的执行结果,通过 $?
来判断,结果当前一句pid
为空时,inner_stop
总会返回1
。本来的意图是,判断当pid存在才执行kill,否则pid为空直接返回成功,而不是返回错误。这里忘了bash函数的返回值是上最后一条语句的执行结果 [ xxx ]
测试语句不满足时返回1
在返回值这点上要注意,不同于其他语言,bash属于弱类型语言,并且返回值总是最后一个命令的执行结果,if condition; then doSomething; fi
语句即可以返回if condition
的执行结果,也可以返回doSomething
的结果。(注意这里说的结果是指return value,不是标准输出的内容)
#!/bin/bash
foo() {
[ ! -z "$x" ] && echo "x not empty"
}
foo || echo "foo function return $?"
上面脚本执行时,如果没有全局声明过x变量,foo函数的返回总是1(错误),需要对另一个分支显式的return 0
才行。