首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BASH extglob否定了不像我期望的那样工作

BASH extglob否定了不像我期望的那样工作
EN

Stack Overflow用户
提问于 2015-04-01 02:44:32
回答 2查看 461关注 0票数 1

假设我有以下dir结构

代码语言:javascript
复制
./testdir
./testdir/a.c
./testdir/b.c
./testdir/testdir2/
./testdir/t.tar

假设我的CWD是testdir,我想回显所有没有.tar扩展的目录条目。

这样做是可行的:

代码语言:javascript
复制
echo *.!(tar)

不过,我原以为这会产生同样的结果,但事实并非如此:

代码语言:javascript
复制
echo *!(tar)

第二命令中只缺少句号。第二个echo命令列出了d.tar文件。星号字汇字符应该匹配所有字符,而填空否定应该列出任何不以tar结尾的内容。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-01 03:05:29

让我们从以下文件开始:

代码语言:javascript
复制
$ ls
a.b  b.c  testdir2  t.tar

这将匹配所有有句点但在句点之后没有tar的文件:

代码语言:javascript
复制
$ echo *.!(tar)
a.b b.c

这将匹配不以tar结尾的所有文件。

代码语言:javascript
复制
$ echo !(*tar)
a.b b.c testdir2

这是一个令人惊讶但不应该发生的事情:

代码语言:javascript
复制
$ echo *!(tar)
a.b b.c testdir2 t.tar

*本身可以匹配任何东西,比如t.tar。因为没有必要在tar之后添加t.tar,所以这是匹配的。

票数 4
EN

Stack Overflow用户

发布于 2015-04-01 03:06:02

*!(tar)位不是相交的互补球形集。

它们形成了一个必须扩张的整体。

我猜t.tar匹配某些东西,比如t.tar匹配*,"“匹配!(tar)

你想要的是!(*tar)。任何与*tar全球不匹配的东西。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29382013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档