假设我在if语句中使用了一个函数:
if isSomeConditionTrue; then
echo "true";
else
echo "false";
fi
如果定义了isSomeConditionTrue
,这样可以正常工作。
但是,如果未定义isSomeConditionTrue
,例如由于输入错误或缺少导入,它的结果为"false"
而不是失败。
set -u
没有什么区别。
答案 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本身的状态;考虑保留的返回值。)