如何在zsh中拆分数组的每个元素?

时间:2011-12-06 22:25:34

标签: zsh

如果我有一个数组:

x=( a:1 b:2 c:3 )

如何在冒号上拆分数组的每个元素?我正在尝试这样做以形成一个关联数组。

我已尝试了几种变体,但似乎都没有效果:

print -l ${(s,:,)x}

这可能吗?如果是这样,我错过了什么?

2 个答案:

答案 0 :(得分:3)

好的 - 进一步的思考让我得到了这个解决方案,这可能适用于问题背后的问题: 循环遍历数组x

> x=(a:1 b:2 c:3)
> typeset -A z
> for i in $x; do z+=(${(s,:,)i}); done
> echo $z
1 2 3
> echo ${z[a]}
1

我希望这比第一个答案更有帮助: - )

由于x是一个数组,所以你不应该忘记[@],即print ${(s,:,)x[@]};因此,您的代码变为print -l ${(s,:,)x[@]};但解决方案仍然是另一个步骤:

> typeset -A z
> x="a:1 b:2 c:3"
> z=($(echo ${(s,:,)x}))
> echo $z[a]            
1

关联数组的赋值是使用echo语句的输出完成的。

进一步澄清并包含原始示例x

> typeset -A z
> x=(a:1 b:2 c:3)
> z=($(echo ${(s,:,)x[@]}))
> echo ${z[a]}
1
> echo ${z[b]}
2

(编辑:转换思想打字:-D,现在应该更有意义) (编辑2:strfed brainf * rt - zsh和bash之间的相似性并不像我想象的那么广泛)

答案 1 :(得分:2)

typeset -A x会使x成为一个关联数组

$ typeset -A x
$ x=( a 1 b 2 c 3 )
$ echo $x[a]
1
$ echo $x[c]
3
$ x[d]=5
$ echo $x[d]
5

但如果您需要从字符串“a:1 b:2 c:3”开始,我不知道如何分割冒号。