Я делал в ЗШ:
array={geometry, analysis, topology, graph theory, calculus}
echo $array
а затем я хотел добавить слово «математика:» к каждому элементу, например «математика: исчисление»:
while (( i++ < 10)); { echo math:$array[i] }
Но это не работает? Зачем?
У меня отлично работает в zsh с изменением назначения с:
array={geometry, analysis, topology, graph theory, calculus}
к
array=(geometry, analysis, topology, graph theory, calculus)
Но у zsh есть множество опций, которые меняют его поведение. Может быть, поможет вывод setopt.
Просто сделать:
array=(geometry analysis topology "graph theory" calculus)
print -l math:${^array}
или проверить RC_EXPAND_PARAM
для ${^var}
форма.
Хорошо, я собираюсь здесь рискнуть (потому что я не согласен с тем, что вспомогательный код верен) и скажу, что в «echo math: $ array [i]» отсутствует знак доллара и должно быть «echo математика: $ array [$ i] "
Итерация по массиву лучше работает с for
потому что вы не перебегаете конец, как ваш код (если вы не установите ограничение на размер массива с помощью $ {# array [*]}).
Кроме того, я предполагаю, что вы не хотите, чтобы запятые включались как часть строк, и вам следует использовать круглые скобки вместо фигурных скобок для вашего массива.
array=(geometry analysis topology "graph theory" calculus)
for i in $array; do echo math:$i; done