Назад | Перейти на главную страницу

Как я могу добавить слово к каждому элементу массива в Zsh?

Я делал в ЗШ:

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