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

如何在zsh中拆分数组的每个元素?,zsh,Zsh,如果我有一个数组: x=( a:1 b:2 c:3 ) 如何拆分冒号上数组的每个元素?我试图这样做是为了形成一个关联数组 我尝试了几种不同的方法,但似乎都不管用: print -l ${(s,:,)x} 这可能吗?如果是这样,我缺少什么?排版-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”开始

如果我有一个数组:

x=( a:1 b:2 c:3 )
如何拆分冒号上数组的每个元素?我试图这样做是为了形成一个关联数组

我尝试了几种不同的方法,但似乎都不管用:

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

这可能吗?如果是这样,我缺少什么?

排版-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”开始,我不知道如何在冒号上拆分。好的-进一步思考使我找到了这个解决方案,这可能适用于问题背后的问题: 在数组中循环
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
是一个数组,您不应该忘记
[@]
,即
打印${(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:striked brainf*rt-zsh和bash之间的相似性没有我想象的那么广泛)

提供的答案有用吗,或者你还有其他问题吗?这感觉很接近,但并不完全存在:(回声迫使它进行分词,我意识到我在我的人为示例中设法将其简化了。)(尽管如此,这回答了提出的问题。:)顺便说一句:我认为
${x}
${x[@]}
是相同的?(除了双引号外)我的错误-它在zsh中,在bash中
${x}
只是数组的第一个元素。回音对于在空格上应用分词是完全必要的,因为赋值
z=(${(s,:,)x})
拆分为:,因此第一个键是
a
,其值为
1b
,第二个键是
2c
,其值为
3
@dominic mitchel添加的循环解决方案更接近实际应用程序吗?