zsh循环中的排除

8

这是一个比较简单的问题,但我却无法想出如何在zsh循环中排除某些内容。举个例子,假设我们有以下内容:

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个回答

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

通常最简单的错误是最难发现的。很高兴能够帮助。 - johnsyweb

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接