8

这是一个简单的问题,但对于我的生活,我无法弄清楚如何从 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*

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

4

2 回答 2

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
于 2010-05-23T09:06:08.887 回答
1

如果我set -o EXTENDED_GLOB(或setopt EXTENDED_GLOB),那个 for 循环对我有用。

于 2010-05-23T08:49:26.810 回答