2010-05-23 14 views
8

Questa è in qualche modo una domanda semplice, ma per la vita di me, non riesco a capire come escludere qualcosa da un ciclo zsh for. Per esempio, diciamo che abbiamo questo:zsh per esclusione ciclica

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

Diciamo che in /home/user/settings/, v'è una particolare directory ("OS") che voglio ignorare. Logicamente, ho provato le seguenti variazioni:

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* 

... ma nessuno di quelli sembra funzionare. Qualcuno potrebbe orientare la mia sintassi nella giusta direzione?

risposta

8

Mi sembra che lo $ in più potrebbe essere ciò che sta causando il tuo dolore.

Prova questo:

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

Se si desidera limitare ${package} solo directory, utilizzano per /home/user/settings/^os(/).

Assicurarsi inoltre di avere extendedglob set (che credo che fate dal ls lavori per voi):

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

Gosh, errore stupido - grazie per il vostro aiuto! :) – ABach

+1

+1 - Non posso credere di aver perso quel segno di dollaro. –

+0

Spesso gli errori più semplici sono i più difficili da individuare. Felice di aiutare. – Johnsyweb

1

Questo per ciclo funziona per me se I set -o EXTENDED_GLOB (o setopt EXTENDED_GLOB).