ZSH pour le tableau de boucle variable issue

je travaille en ZSH, mais je suis sûr que les instructions BASH seront probablement utiles aussi. J'ai besoin d'avoir une boucle for qui passe par les valeurs stockées dans le tableau lw et lance ensuite un script shell, basé sur le nom stocké dans le tableau.

jusqu'à présent, c'est ce que j'ai trouvé:

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

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

il me donne juste une erreur en disant qu'il ne peut pas trouver ~ / Library/Rogall/plugins/ / lw.prg, donc il semble que c'est juste en ignorant ma variable tout togethor.

N'importe quelles idées où j'ai foiré?

18
demandé sur user1296965 2012-06-05 00:03:04

2 réponses

C'est en fait beaucoup plus simple que cela:

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

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

En résumé:

  • Attribuer à "toto", pas "$foo" (l'interpréteur de commandes devrait essayer de l'élargir $foo, et de confier à ce qu'il développe; en général pas utile)
  • utilisez la variable loop directement; elle contient le tableau valeur plutôt que index
32
répondu Jan Krüger 2012-06-04 20:12:48

pourquoi prendre la peine d'utiliser le tableau? Cela peut être fait en sh portable très facilement:

lw='plugin1 plugin2 plugin3'

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

notez que pour que cela fonctionne en zsh, vous devez faire en sorte que zsh fasse la bonne chose avec: set -o shwordsplit

16
répondu William Pursell 2012-06-04 20:31:17