3.5.1 Brace Expansion
Brace expansion is a mechanism by which arbitrary strings may be generated.
This mechanism is similar to
filename expansion (see section 3.5.8 Filename Expansion),
but the file names generated need not exist.
Patterns to be brace expanded take the form of an optional preamble,
followed by a series of comma-separated strings between a pair of braces,
followed by an optional postscript.
The preamble is prefixed to each string contained within the braces, and
the postscript is then appended to each resulting string, expanding left
to right.
Brace expansions may be nested.
The results of each expanded string are not sorted; left to right order
is preserved.
For example,
bash$ echo a{d,c,b}e
ade ace abe
Brace expansion is performed before any other expansions,
and any characters special to other expansions are preserved
in the result. It is strictly textual. Bash
does not apply any syntactic interpretation to the context of the
expansion or the text between the braces.
To avoid conflicts with parameter expansion, the string '${'
is not considered eligible for brace expansion.
A correctly-formed brace expansion must contain unquoted opening
and closing braces, and at least one unquoted comma.
Any incorrectly formed brace expansion is left unchanged.
This construct is typically used as shorthand when the common
prefix of the strings to be generated is longer than in the
above example:
mkdir /usr/local/src/bash/{old,new,dist,bugs}
or
chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}