why doesn't *.abc match a file named .abc?
===

I thought I understood wildcards, till this happened to me. Essentially, I'm looking for a wild card pattern that would return all files that are not named `.gitignore`. I came up with this, which seems to work for all cases I could conjure:

    ls *[!{gitignore}]

To really validate if this works, I thought I'd negate the expression and see if it returns the file named `.gitignore` (actually any file that ended with `gitignore`; so `1.gitignore` should also be returned). To that effect, I thought the negated expression would be:

    ls *[{gitignore}]    

However, this expression doesn't return a files named `.gitignore` (although it returns a file named `1.gitignore`). 

Essentially, my question, after simplification, boils down to:

> Why doesn't *.abc match a file that is named .abc

I think I can take it from there.

PS:

 1. I am working on Mac OSX Lion (10.7.4)
 2. I wanted to add a clause to `.gitignore` such that I would ignore every file, except `.gitignore` in a given folder. So I ended up adding `*` in the `.gitignore` file. Result was, git ended up ignoring `.gitignore` :)
