如何在 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_unset
,set +u
等同于setopt unset
。你把意思颠倒了。
set -u
foo() {
setopt local_options unset
echo $xx
}
foo # prints an empty line
echo $xx # errors out
文档参考:
- 长选项文档:
UNSET
等同于 +u
(而不是 -u
)
- Single letter option documentation:
-u
等同于 NO_UNSET
(而不是 UNSET
)
我要开启
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_unset
,set +u
等同于setopt unset
。你把意思颠倒了。
set -u
foo() {
setopt local_options unset
echo $xx
}
foo # prints an empty line
echo $xx # errors out
文档参考:
- 长选项文档:
UNSET
等同于+u
(而不是-u
) - Single letter option documentation:
-u
等同于NO_UNSET
(而不是UNSET
)