zsh相当于bash $ {!name *}或$ {!name @}

问题描述 投票:1回答:1

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解决方案的必要先驱,尽管我可能对此有误。)

zsh
1个回答
0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.