检查字符串的计算结果是否为间接展开中变量的名称



我试图检查字符串是否评估为变量的名称。这在bash中有效:

[[ -z "${!VALUE_OF_VAR}" ]]

但是在ZShell中,它会导致无效的替换。在ZShell中检查变量是否计算为变量名(设置)的等效方法是什么?

bash不同,zsh中的间接展开以不同的方式处理,可以在zsh -官方文档中的参数展开标志

中找到。
P

这强制将参数名的值解释为另一个参数名,该参数名的值将在适当的地方使用。请注意,使用typeset系列命令之一设置的标志(在特殊情况下的转换)不会应用于以这种方式使用的name值。

如果与嵌套参数或命令替换一起使用,其结果将以同样的方式作为参数名称。例如,如果您有foo=barbar=baz,则字符串${(P)foo}${(P)${foo}}${(P)$(echo bar)}将扩展为baz

采用上述任意一种格式,我认为你需要

[[ -z "${(P)VALUE_OF_VAR}" ]]

如果您想检查$varname是否计算为已声明变量的名称,您可以简单地使用[[ -v $varname ]]

例如:

% varname=var
% var=
% [[ -v $varname ]]; print $?
0
% unset var
% [[ -v $varname ]]; print $?
1

相关内容

  • 没有找到相关文章

最新更新