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