如果我有一个数组:
x=( a:1 b:2 c:3 )
如何在冒号上拆分数组的每个元素?我正在尝试这样做以形成一个关联数组。
我已尝试了几种变体,但似乎都没有效果:
print -l ${(s,:,)x}
这可能吗?如果是这样,我错过了什么?
答案 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”开始,我不知道如何分割冒号。