zsh:通过间接引用测试变量的存在

时间:2017-07-06 13:18:11

标签: zsh

如果我想知道,zsh中是否存在变量v,我可以使用y_len = y.shape.num_elements() res = tf.zeros((0,2)) for idx in range(y_len): res = tf.concat([res, tf.reduce_mean(x[idx, :y[idx]], axis=0)[tf.newaxis]], axis=0) 。例如:

${+v}

输出 1 1 0

如果我想访问变量的内容,我将其NAME存储在变量v中,我可以使用u=xxx v= print ${+u} ${+v} ${+w} 来完成。例如:

${(P)v}

输出 xxx

现在我想结合两者:测试变量是否存在,但变量的名称存储在另一个变量中。我怎样才能做到这一点?例如:

a=xxx
b=a
print ${(P)b}

这是我的方法不起作用:

r=XXX
p=r
q=s

但是,我收到错误消息 zsh:bad substitution

有没有办法在不恢复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 的情况下实现目标?

1 个答案:

答案 0 :(得分:2)

print ${(P)+p}
print ${(P)+q}

参数扩展标志的左括号需要在开括号之后立即跟随。此外,没有必要明确替换pq,因为(P)会照顾到这一点。不过,${(P)+${p}}${(P)+${q}}也可以。