在bash
中,有一个参数扩展,以生成与给定前缀匹配的变量的名称。例如,
$ foo1=a foo2=b four=4
$ echo "${!foo@}"
foo1 foo2
zsh
中有等同词吗?我知道(P)
参数扩展标志等同于类似的bash
间接扩展${!foo}
:
# bash
$ foo=bar bar=3
$ echo ${!foo}
3
# zsh
% foo=bar bar=3
% echo ${(P)foo}
3
但是据我所知,(P)
还不能处理前缀匹配。
% echo "${(P}foo@}"
zsh: bad substitution
似乎没有任何方法可以对参数name执行任何类型的globing操作,仅对参数of的扩展有效。
(这似乎是Use wildcard expansion to echo all variables in zsh解决方案的必要先驱,尽管我可能对此有误。)
typeset -m
可以营救:
typeset -m
如果给定
-m
标志,则将名称参数视为模式(使用引号防止将其解释为文件模式)。没有属性标志时,将打印所有具有匹配名称的参数(或带有-m
标志的功能)(在这种情况下,不使用shell选项-f
)。-
TYPESET_SILENT
zshbuiltins(1), shell builtin commands, typeset
或者% foo1=a foo2=b four=4
% typeset -m 'foo*'
foo1=a
foo2=b
模块中的$parameters
可以帮助:
$parameters
此关联数组中的键是当前定义的参数的名称。
-
zsh/parameters
parameters