arrays - 如何将关联数组分配给 zsh 中的另一个变量?

标签 arrays shell associative-array zsh

在 zsh 中,有没有办法将关联数组分配给另一个变量?我想要这样的事情:

typeset -A orig
orig=(key1 val1 key2 val2)
typeset -A other
other=$orig
print '$orig:  '$orig
print '$other: '$other
print '$orig[key1]: '$orig[key1]
print '$other[key1]: '$other[key1]

这将打印:

$orig:  val1 val2
$other: val1 val2
$orig[key1]: val1
$other[key1]: 

我希望能够使用 $other[key1] 并获取 val1

我知道我可以迭代键并逐项复制它,但我真的想避免这种情况。另外,eval 是邪恶的:)

我尝试过 other=($orig) 和其他变体,但这将从 orig 获取我的值并像这样创建关联数组

other=(val1 val2)

因此 other[key1] 不返回任何内容,而 other[val1] 返回 val2,这不是我想要的。

如果我理解正确的话,我的每次尝试中发生的事情是 $other 正在获取 $orig 的数组,没有 key 。我怎样才能让它接收键值并在它们之间建立正确的关联?

我不担心空值,如果这会成为问题的话, 因为我确信 $orig 会表现良好。

谢谢!

最佳答案

您必须深入研究参数扩展标志的奇妙世界:) kv 标志可以一起使用,以强制关联数组扩展到其两个键和值。

$ typeset -A orig
$ orig=(key1 val1 key2 val2)
$ print ${(kv)orig}
key1 val1 key2 val2

然后您可以使用 set 命令使用该扩展生成的交替键/值填充您的副本。

$ typeset -A other
$ set -A other ${(kv)orig}
$ print $other[key1]
val1

这些和其他标志记录在“参数扩展标志”下的 man zshexpn 中,这是我最喜欢的 zsh 功能之一。

关于arrays - 如何将关联数组分配给 zsh 中的另一个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19284296/

相关文章:

php - 将日期数组拆分为可用的类次来工作?

python - 如何检索目录中最近创建的文件

linux - 如何通过计算 AWK 或 bash 中 char 的出现次数来过滤行?

linux - "top"在shell中会调用哪个系统调用?

zsh - 在 zsh 关联数组中找到与值匹配的键?

string - 字符串的固定时间哈希?

c - 结构数组不能正确接受输入

c - 指向数组的指针

linux - 选择多个模式的 awk 代码

javascript - 如果关联数组从正则表达式返回,则它是排序索引