zsh for loop exclusion

时间:2010-05-23 04:10:11

标签: for-loop zsh glob

这是一个简单的问题,但对于我的生活,我无法弄清楚如何从zsh for循环中排除某些东西。例如,假设我们有这个:

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*

......但这些似乎都不起作用。有人可以指导我的语法正确吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

如果我set -o EXTENDED_GLOB(或setopt EXTENDED_GLOB),那for循环适用于我。