我在 Zsh 中做了:
array={geometry, analysis, topology, graph theory, calculus}
echo $array
然后我想向每个元素添加单词“math:”,例如“math:calculus”:
while (( i++ < 10)); { echo math:$array[i] }
但它不起作用?为什么?
答案1
在 zsh 中,我可以将任务从以下位置更改,这样就可以正常工作:
array={geometry, analysis, topology, graph theory, calculus}
到
array=(geometry, analysis, topology, graph theory, calculus)
但是 zsh 有大量选项可以改变其行为。也许输出“setopt”可能会有所帮助。
答案2
做就是了:
array=(geometry analysis topology "graph theory" calculus)
print -l math:${^array}
或检查RC_EXPAND_PARAM
表格${^var}
。
答案3
好吧,我要冒险一试(因为我不认为支持代码是正确的),我说“echo math:$array[i]”缺少美元符号,应该是“echo math:$array[$i]”
答案4
遍历数组效果更好,for
因为您不会像代码那样超出末尾(除非您使用 ${#array[*]} 将限制设置为数组的大小)。
此外,我假设您不希望将逗号作为字符串的一部分,并且您应该在数组中使用括号而不是花括号。
array=(geometry analysis topology "graph theory" calculus)
for i in $array; do echo math:$i; done