这是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