首页 > 解决方案 > 在测试函数中使用参数调用bash函数

问题描述

我想在测试函数 (()) 中调用带有参数的函数并根据退出代码执行操作。

function f { return
}

作品:在没有参数的测试函数(())中调用函数和测试退出代码:

((f)) || echo ok   <-- UPDATE: the function isn't called but (undefined) variable f is evaluated to 0

作品:使用参数调用函数并测试退出代码

f 1 && echo ok

作品:使用表达式测试函数(()):

((1+1)) && echo ok

不起作用:在测试函数 (()) 中使用参数调用函数并测试退出代码:

((f 1)) || echo ok <-- UPDATE: no call of function f, but f evaluated to 0

表达式中的语法错误(错误标记为“1”)

更新:上述方法没有意义,因为函数 f 不在 (()) 内调用

我有的:

if ((var)); then
  f arg1 arg2 agr3
  if [[ $? != 0 ]]; then
    ...
  fi
fi

我想要的:只有一个带有 AND 的逻辑表达式,同时检查两个条件。并且仅在评估 var 之后才执行 f ,所以不要:

f arg1 arg2 arg3
if [[ ($? != 0) && ($var != 0) ]]; then ...

标签: bashfunctionparameter-passing

解决方案


if ((var)); then
  f arg1 arg2 agr3
  if [[ $? != 0 ]]; then
    ...
  fi
fi

我想要的:只有一个带有 AND 的逻辑表达式,同时检查两个条件。

只是:

if ((var)) && ! f arg1 arg2 agr3; then

作为一般规则,尽量不要使用$?- 只是测试内部命令的结果if


推荐阅读