(问题已发布在Unix Forum,但未收到任何回复)
我的.zshrc中有以下函数定义(简化示例):
function foo {
local p=${1:?parameter missing}
echo continue ....
}
只需输入foo
生成函数,就会产生消息参数缺失,但它也会输出 continue 。我曾预料到当:?
检查失败时该函数会终止,但它会继续运行。为什么会这样?
man-page zshexpn说:?
:
... otherwise, print word and exit from the shell. Interactive shells instead return to the prompt.
我发现我遇到的行为取决于local
说明符的存在与否。如果我删除local
,该函数按预期工作,即如果没有传递参数,则立即从函数返回。
因为我在我的应用程序中需要local
,所以我重写了这个函数:
function foo {
: ${1:?parameter missing}
local p=$1
echo continue ....
}
这很好用,但我仍然很想知道为什么local
与:?
的组合会导致这种行为上的差异。
更新:我也在Zsh邮件列表上发布了该问题,zsh开发人员确认这是Zsh中的一个错误。