Search code examples
bashextglob

Bash extended globbing bug?


There are three files in a directory:

ab2 ab23 ab3

When I execute:

ls ab+(2|3)

It displays:

ab2 ab23 ab3

instead of ab2 and ab3 only.

Any ideas why it is like that? Is it a bug?


Solution

  • It's not a bug. +(pattern) matches one or more occurrences of the pattern. +(2|3) will match any combination and any number of 2's and 3's: 2, 3, 23, 32, 222, 333, 3223232323—any of those.

    If you want strict alternation without repeats, change + to @:

    ab@(2|3)
    

    (Or just use ab[23]. That doesn't even require extglob.)