zsh:通过间接引用测试变量的存在性
如果我想知道变量v是否存在于zsh中,我可以使用zsh:通过间接引用测试变量的存在性,zsh,Zsh,如果我想知道变量v是否存在于zsh中,我可以使用${+v}。例如: u=xxx v= print ${+u} ${+v} ${+w} a=xxx b=a print ${(P)b} 产出11 0 如果我想访问一个变量的内容,在变量v中存储了它的名称,我可以使用${(p)v}来访问它。例如: u=xxx v= print ${+u} ${+v} ${+w} a=xxx b=a print ${(P)b} 输出xxx 现在,我想将这两种方法结合起来:测试变量是否存在,但变量的名称存储在另一个
${+v}
。例如:
u=xxx
v=
print ${+u} ${+v} ${+w}
a=xxx
b=a
print ${(P)b}
产出11 0
如果我想访问一个变量的内容,在变量v中存储了它的名称,我可以使用${(p)v}
来访问它。例如:
u=xxx
v=
print ${+u} ${+v} ${+w}
a=xxx
b=a
print ${(P)b}
输出xxx
现在,我想将这两种方法结合起来:测试变量是否存在,但变量的名称存储在另一个变量中。我该怎么做?例如:
r=XXX
p=r
q=s
以下是我的方法,但它不起作用:
print ${+${(P)p}} # Expect 1, because $p is r and r exists.
print ${+${(P)q}} # Expect 0, because $q is s and s does not exist
但是,我得到了错误消息zsh:bad substitution
有没有一种方法可以在不返回到eval
的情况下实现我的目标
print ${(P)+p}
print ${(P)+q}
参数扩展标志的左括号需要紧跟在右大括号之后。此外,无需明确替换p
或q
,因为(p)
会处理这一问题。然而,${(P)+${P}}
和${(P)+${q}}
也会起作用
参数扩展标志的左括号需要紧跟在右大括号之后。此外,无需明确替换p
或q
,因为(p)
会处理这一问题。然而,${(P)+${P}}
和${(P)+${q}}
也会起作用