假设我有以下dir结构
./testdir
./testdir/a.c
./testdir/b.c
./testdir/testdir2/
./testdir/t.tar假设我的CWD是testdir,我想回显所有没有.tar扩展的目录条目。
这样做是可行的:
echo *.!(tar)不过,我原以为这会产生同样的结果,但事实并非如此:
echo *!(tar)第二命令中只缺少句号。第二个echo命令列出了d.tar文件。星号字汇字符应该匹配所有字符,而填空否定应该列出任何不以tar结尾的内容。
发布于 2015-04-01 03:05:29
让我们从以下文件开始:
$ ls
a.b b.c testdir2 t.tar这将匹配所有有句点但在句点之后没有tar的文件:
$ echo *.!(tar)
a.b b.c这将匹配不以tar结尾的所有文件。
$ echo !(*tar)
a.b b.c testdir2这是一个令人惊讶但不应该发生的事情:
$ echo *!(tar)
a.b b.c testdir2 t.tar*本身可以匹配任何东西,比如t.tar。因为没有必要在tar之后添加t.tar,所以这是匹配的。
发布于 2015-04-01 03:06:02
*和!(tar)位不是相交的互补球形集。
它们形成了一个必须扩张的整体。
我猜t.tar匹配某些东西,比如t.tar匹配*,"“匹配!(tar)。
你想要的是!(*tar)。任何与*tar全球不匹配的东西。
https://stackoverflow.com/questions/29382013
复制相似问题