0

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

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

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

但是,如果isSomeConditionTrue未定义,例如由于拼写错误或缺少导入,它会评估为"false"而不是失败。

set -u没有什么区别。

4

2 回答 2

1

我建议在你之前插入这个if

command_not_found_handle () { false; }
于 2016-12-04T12:52:27.197 回答
1

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

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

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

于 2016-12-04T15:51:34.170 回答