BASH if语句中的函数返回值

bas*_*sil 0 linux bash shell sh

我已经在BASH if-then语句中查看了句柄函数返回值的各种方法,但似乎都没有.这就是我所拥有的

 function is_cloned()
 {
      if [ -d $DIR_NAME ]
      then
           return $SUCCESS
      fi
      return $FAILURE
 }
Run Code Online (Sandbox Code Playgroud)

如果我自己调用它并检查返回值,它将起作用:

 is_cloned
 retval=$?
 if [ $retval -eq $FAILURE ] 
 then
      ...
 fi
Run Code Online (Sandbox Code Playgroud)

如何在if语句中使用函数调用?或者根本没有办法利用返回值?

Sto*_*ica 7

ifBash中的语句可以直接使用函数的退出代码.所以你可以这样写:

if is_cloned
then
    echo success
fi
Run Code Online (Sandbox Code Playgroud)

如果您想检查失败,就像在发布的代码中一样,您可以使用!运算符:

if ! is_cloned
then
    echo failure
fi
Run Code Online (Sandbox Code Playgroud)

顺便说一句,你的is_cloned功能也可以更多地依赖退出代码,你可以像这样写:

is_cloned() {
    [ -d "$DIR_NAME" ]
}
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为函数的退出代码是最后执行的命令的退出代码,[ ... ]如果成功则退出代码为0,否则为非零(=失败).

还记得用双引号用作命令参数的变量名,就像我在DIR_NAME这里做的那样.

  • @ 123只是因为它很简单,这并不意味着它没用.该函数封装了一个特定的逻辑.如果逻辑需要稍后改进,可以通过仅修改函数来完成,只剩下程序的其余部分. (2认同)
  • @ 123,......肯定会有一个判决电话.*但是*,如果`is_cloned`让读者更清楚一个语句背后的意图是什么,而不是来自上下文,这本身就是在增加价值.(这个值是否足够......再次,我们处于依赖于上下文的判断调用区域) (2认同)