2010-05-23 89 views
8

這是一個簡單的問題,但對於我的生活,我無法弄清楚如何從zsh for loop中排除某些東西。舉例來說,假設我們有這樣的:zsh for loop exclusion

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

比方說,在/home/user/settings/,還有就是我想忽略特定目錄(「OS」)。從邏輯上說,我嘗試了以下變化:

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 2010-05-23 16:32:14

+1

+1 - 我不能相信我錯過了那個美元符號。 – 2010-05-23 20:03:14

+0

通常最簡單的錯誤是最難找到的。樂於幫助。 – Johnsyweb 2010-05-23 23:07:36

1

對於我而言,for循環適用於我,如果我set -o EXTENDED_GLOB(或setopt EXTENDED_GLOB)。