条件函数未定义时失败

时间:2016-12-04 12:35:52

标签: bash if-statement undefined-function

假设我在if语句中使用了一个函数:

if isSomeConditionTrue; then
  echo "true";
else
  echo "false";
fi

如果定义了isSomeConditionTrue,这样可以正常工作。

但是,如果未定义isSomeConditionTrue,例如由于输入错误或缺少导入,它的结果为"false"而不是失败。

set -u没有什么区别。

2 个答案:

答案 0 :(得分:1)

我建议您在if

之前插入此内容
command_not_found_handle () { false; }

答案 1 :(得分:1)

最终,您只需要调试脚本并确保您拥有相应的导入,并且不要输入拼写错误。也就是说,有一种方法可以区分未定义的命令和正常的失败,尽管它可能不是你想在整个脚本中使用的东西。

isSomeConditionTrue
case $? in
  127) echo "Command not found" ;;
  0) echo "Command succeeds" ;;
  *) echo "Some other problem" ;;
esac

退出状态为127表示找不到该命令。 (注意,这意味着一个行为良好的程序不应该返回127本身的状态;考虑保留的返回值。)