如何在 zsh 中本地设置 -u?

How to do a set -u locally in zsh?

我要开启

set -u

仅在一个 zsh 函数体内。在函数结束时,它应该恢复到之前的状态。

我想我必须做一个

setopt localoptions ????

在函数内部,但是 ???? 的位置是什么? ?从 zsh 联机帮助页中,我找到了选项 UNSET 的解释,但这对应于 set +u,而不是 set -u

更新:

根据chepner给出的答案,我也尝试过:

set -u
foo() {
 setopt NO_UNSET LOCAL_OPTIONS
 echo $xx
}
bar() {
 setopt localoptions nounset
 echo $xx
}

但是这两个函数在调用时都会中止并显示 xx: 参数未设置

UNSET 选项的倒数是 NO_UNSET

foo () {
    setopt NO_UNSET LOCAL_OPTIONS
    ...
}

set -u等同于setopt no_unsetset +u等同于setopt unset。你把意思颠倒了。

set -u
foo() {
 setopt local_options unset
 echo $xx
}
foo # prints an empty line
echo $xx # errors out

文档参考: