the [] are used to specify a range of possible characters, eg. *.[ch] expands to all files ending in .c or .h

files whose name starts with a . are not considered

if no matching filenames are found, the expression is used as it is

Some shells contain more features and sometimes, features are configurable. Globbing is also available elsewhere, programming languages often have a built-in function for it.

This feature provides a nice uniformity to Unix programs; they do not have to contain their own wildcard expansion, the shell does it for them. (Unfortunately, the parsing of command lines into options and arguments is not taken care of by the shell, and as a consequence, conventions in that area differ greatly from program to program.)

The {} operator found in many shells is a regular expression operation: *.{c,h} expands to *.c *.h regardless of the existence of matching files; the result is matched against the actual filenames found on the system.