当$ {name:?word}失败时,Zsh函数不会终止

时间:2016-09-13 06:32:14

标签: zsh

(问题已发布在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中的一个错误。

0 个答案:

没有答案