假设我在 if 语句中使用了一个函数:
if isSomeConditionTrue; then
echo "true";
else
echo "false";
fi
如果isSomeConditionTrue
已定义,这可以正常工作。
但是,如果isSomeConditionTrue
未定义,例如由于拼写错误或缺少导入,它会评估为"false"
而不是失败。
set -u
没有什么区别。
假设我在 if 语句中使用了一个函数:
if isSomeConditionTrue; then
echo "true";
else
echo "false";
fi
如果isSomeConditionTrue
已定义,这可以正常工作。
但是,如果isSomeConditionTrue
未定义,例如由于拼写错误或缺少导入,它会评估为"false"
而不是失败。
set -u
没有什么区别。
我建议在你之前插入这个if
:
command_not_found_handle () { false; }
最终,您只需要调试您的脚本并确保您有适当的导入并且不打错字。也就是说,有一种方法可以区分未定义命令和正常失败,尽管它可能不是您想在整个脚本中使用的东西。
isSomeConditionTrue
case $? in
127) echo "Command not found" ;;
0) echo "Command succeeds" ;;
*) echo "Some other problem" ;;
esac
退出状态 127 表示未找到该命令。(请注意,这意味着表现良好的程序本身不应返回 127 状态;请考虑保留返回值。)