2010-05-23 13 views
8

C'est en quelque sorte une question simple, mais pour la vie de moi, je ne peux pas comprendre comment exclure quelque chose d'un zsh pour une boucle. Par exemple, disons que nous avons ceci:zsh pour l'exclusion de boucle

for $package in /home/user/settings/* 
do 
    # do stuff 
done 

Disons que dans /home/user/settings/, il y a un répertoire particulier (« os ») que je veux ignorer. Logiquement, j'ai essayé les variantes suivantes:

for $package in /home/user/settings/^os (works w/ "ls", but not with a foor loop) 
for $package in /home/user/settings/*^os 
for $package in /home/user/settings/^os* 

... mais aucun d'entre eux ne semble fonctionner. Quelqu'un pourrait-il diriger ma syntaxe dans la bonne direction?

Répondre

8

Il me semble que le supplément $ peut être ce qui cause votre chagrin.

Essayez ceci:

for package in /home/user/settings/^os; do 
    echo "Doing stuff with ${package}..." 
done 

Si vous voulez limiter ${package} juste répertoires, utilisez /home/user/settings/^os(/).

Assurez-vous également que vous avez extendedglob ensemble (que je pense que vous faites depuis ls travaille pour vous):

> set -o | grep -i extendedglob 
extendedglob   on 
+2

Gosh, erreur stupide - merci pour votre aide! :) – ABach

+1

+1 - Je ne peux pas croire que j'ai raté ce signe dollar. –

+0

Souvent, les erreurs les plus simples sont les plus difficiles à détecter. Heureux d'aider. – Johnsyweb

1

Que pour la boucle fonctionne pour moi si je set -o EXTENDED_GLOB (ou setopt EXTENDED_GLOB).