鉴于这些文件:
300000
我期待这种通配模式(启用了extglob的bash):
$ ls
file1 file2 file21 file3 fileFoo
输出:
$ ls file?({1..2}|Foo)
但我在两次列出的file1 file2 fileFoo
时得到了这个:
fileFoo
"或"的任何一方都没有。产生意想不到的结果:
$ ls file?({1..2}|Foo)
file1 file2 fileFoo fileFoo
那么,为什么$ ls file?({1..2})
file1 file2
$ ls file?(Foo)
fileFoo
会在我"或"表达式以及匹配范围的正确的globbing模式(例如1-2以上但可能是17-593或任何其他范围)或其他一些不相关的字符串(例如上面的Foo)?
fileFoo
答案 0 :(得分:2)
在globbing之前执行扩展:
file?({1..2}|Foo)
变为
file?(1|Foo) file?(2|Foo)
然后两个参数都是全局的。
按照以下方式使用扩展按预期工作,但会使nullglob
之类的东西绊倒:
file{{1..2},Foo}
答案 1 :(得分:2)
它被解释为:
ls file?(1|Foo) file?(2|Foo)
正在扩展范围,然后将每个值与|Foo
结合使用。
因此,当展开每个模式时,您将获得以数字结尾的文件和以Foo
结尾的文件。
尝试:
ls file{{1..2},Foo)