shell 检查字符串的计算结果是否为zsh中的变量名-间接扩展

9ceoxa92  于 2022-11-16  发布在  Shell
关注(0)|答案(2)|浏览(107)

我试着检查一个字符串是否等于一个变量的名字。

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

但是在ZShell中,它会导致无效的替换。在ZShell中,如果一个变量的值等于变量的名称(被设置),那么等价的检查是什么?

7vux5j2d

7vux5j2d1#

如果 要 检查 $varname 是否 计算 为 set 参数 的 名称 , 只需 使用 [[ -v $varname ]] 即可 。
例如 :

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

中 的 每 一 个

pbpqsu0x

pbpqsu0x2#

bash不同,间接扩展在zsh中以不同的方式进行处理,可以在zsh -官方文档中的Parameter expansion flags下找到

P

这会胁迫将参数名称的值解译为进一步的参数名称,并在适当的地方使用该值。请注意,以排版系列命令之一设定的旗标(在特定情况下为转换)不会套用至以这种方式使用的名称值。
如果与嵌套参数或命令替换一起使用,则其结果将以相同的方式作为参数名。例如,如果有foo=barbar=baz,则字符串${(P)foo}${(P)${foo}}${(P)$(echo bar)}将扩展为baz
采用上述格式,我认为您需要

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

相关问题