zsh:作业中的错误处理不一致

zsh:作业中的错误处理不一致

这是zsh -f

Fereidoons-MacBook-Pro% local a=$(jaja) && echo bad
zsh: command not found: jaja
bad
Fereidoons-MacBook-Pro% a=$(jaja) && echo bad
zsh: command not found: jaja
Fereidoons-MacBook-Pro%

为什么会local搞乱错误处理?

答案1

zsh有关typeset内置的​​手册(这local是一个特殊情况):

与参数赋值语句不同,typeset涉及命令替换的赋值的退出状态不反映命令替换的退出状态。因此,要测试命令替换中的错误,请将参数的声明与其初始化分开:

  # WRONG
   typeset var1=$(exit 1) || echo "Trouble with var1"

  # RIGHT
   typeset var1 && var1=$(exit 1) || echo "Trouble with var1"

在你的情况下:

$ unset a
$ local a=$(jaja) && echo bad
zsh: command not found: jaja
bad
$ unset a
$ local a && a=$(jaja) && echo bad
zsh: command not found: jaja

相关内容