ZSH для переменной переменной массива цикла

Im работает в ZSH, но я уверен, что инструкции BASH, вероятно, помогут. Мне нужно иметь цикл for, который проходит через значения, хранящиеся в массиве lw, а затем запускает оболочку script на основе имени, хранящегося в массиве.

До сих пор это то, что я придумал:

$lw=('plugin1' 'plugin2' 'plugin3')

for i in $lw;
  do . ~/Library/Rogall/plugins/$lw[$i]/lw.prg end;
done

он просто дает мне ошибку при запуске, говоря, что он не может найти ~/Library/Rogall/plugins//lw.prg, поэтому он просто игнорирует мою переменную all togethor.

Любые идеи, которые я испортил?

Ответы

Ответ 1

На самом деле это намного проще:

lw=('plugin1' 'plugin2' 'plugin3')

for i in $lw; do
  . ~/Library/Rogall/plugins/$i/lw.prg end
done

Вкратце:

  • Назначить "foo", а не "$ foo" (оболочка попытается развернуть $foo и назначить все, что она расширяет, обычно не полезно)
  • Используйте переменную цикла напрямую; он содержит значение массива, а не индекс

Ответ 2

Зачем использовать массив? Это можно сделать в переносном режиме очень легко:

lw='plugin1 plugin2 plugin3'

for i in $lw;
  do . ~/Library/Rogall/plugins/$i/lw.prg end
done

Обратите внимание, что для работы в zsh вам нужно сделать zsh правильно: set -o shwordsplit