假设我用一个函数在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; }
不幸的是,这似乎并不适用于老版本的Bash。 –
这也只是取代127的正常退出状态,退出状态为1.如果使用足够新的'bash'版本,将'command_not_found_handle'设置为实际退出* shell可能会有用。 – chepner
最终,你只需要调试脚本,并确保你有适当的进口,不作错别字。也就是说,有一种方法可以区分一个未定义的命令和一个正常的失败,尽管它可能不是你想在整个脚本中使用的东西。
isSomeConditionTrue
case $? in
127) echo "Command not found" ;;
0) echo "Command succeeds" ;;
*) echo "Some other problem" ;;
esac
退出状态127表示找不到命令。 (请注意,这意味着一个性能良好的程序本身不应返回127的状态;请考虑保留返回值。)
信息丰富,但过于冗长,特别是在组合多个条件函数时。 –
这是一个调试问题;确保定义了“isSomeConditionTrue”。 – chepner