I am using bash version 4.2.28 on Fedora 16. I have the extglob option set. I am trying to list all files matching *.h or *.cpp using ls *(h|cpp) but the command returns the following:
[agnel@damien cadcore]$ ls *(h|cpp)
ls: cannot access *(h|cpp): No such file or directory
I have verified that there are indeed several .h and .cpp files in my current directory. Am I doing something wrong or could this be a bug in bash or ls?
Update: Thank you for your answers. Using *.h *.cpp does what I need. However, I would still like to know why extglob didn’t work like I expected.
The extended glob
*(pattern-list)matches 0 or more occurrences of the following pattern list. It does not match an arbitrary string followed by something from the option list. You want:This matches something, followed by a period, followed by either “h” or “cpp”