bash extglob范围或值匹配相同的文件名两次

时间:2017-06-08 00:09:11

标签: bash glob extglob

鉴于这些文件:

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

2 个答案:

答案 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)