zsh (或者通常使用shell脚本)的一个不好的方面是,如果您输入了一个变量名,而由此产生的名称不存在,那么它将被静默地视为空字符串,这使得很难找到bug:
if somecondition
then
myvar=55
else
my_var=66
fi
echo $MyVar # Oops
我知道这个规则的存在是为了与好的旧伯恩外壳兼容。我还知道,在访问变量时,我可以显式地捕获此错误:
echo ${MyVar?NOT SET}
但是,如果我在每个变量访问中都这样做,就会产生丑陋的代码。由于我习惯于显式地初始化所有变量,所以当访问未设置的shell变量或环境变量时,zsh会自动发出错误消息。有办法这样做吗?我已经查过了zshoptions
手册页,但没有找到合适的。
发布于 2016-02-02 20:03:35
不仅在zsh中,而且在其他shell中,set -u
使对未设置变量的引用成为一个错误。
也就是说,当使用此选项时,许多脚本将无法不修改地工作:不能再使用[[ $foo ]]
来检查foo
是否由外部环境提供,而是需要[[ ${foo-} ]]
。
https://stackoverflow.com/questions/34611118
复制相似问题