2010-05-23 14 views
8

यह कुछ आसान सवाल है, लेकिन मेरे जीवन के लिए, मैं यह नहीं समझ सकता कि लूप के लिए zsh से कुछ कैसे बाहर निकालना है। उदाहरण के लिए, मान लीजिए कि हम इस डालते हैं:लूप बहिष्करण के लिए zsh

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

की कि /home/user/settings/ में, वहाँ एक विशेष निर्देशिका ("ओएस") है कि मैं अनदेखा करना चाहते है मान लीजिए। तर्कसंगत रूप से, मैंने निम्नलिखित बदलावों को आजमाया:

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* 

... लेकिन उनमें से कोई भी काम नहीं कर रहा है। क्या कोई मेरे वाक्यविन्यास को सही दिशा में चला सकता है?

उत्तर

8

मुझे लगता है कि अतिरिक्त $ आपके दुःख का कारण हो सकता है।

इस प्रयास करें:

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

आप ${package} सीमित करने के लिए सिर्फ निर्देशिका, /home/user/settings/^os(/) उपयोग करना चाहते हैं।

यह भी सुनिश्चित आप extendedglob सेट (जो मुझे लगता है कि आप के लिए काम करता है के बाद से ls करते हैं) है कि:

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

हे भगवान, मूर्खतापूर्ण त्रुटि - आपकी मदद के लिए धन्यवाद! :) – ABach

+1

+1 - मुझे विश्वास नहीं है कि मुझे उस डॉलर के संकेत से चूक गया। –

+0

अक्सर सबसे सरल त्रुटियां स्पॉट करने के लिए सबसे कठिन हैं। मदद करने के लिए खुश। – Johnsyweb

1

यदि मैं set -o EXTENDED_GLOB (या setopt EXTENDED_GLOB) के लिए लूप काम करता है तो मेरे लिए काम करता है।