Brace Expansion
Brace expansion is a mechanism by which arbitrary strings may be generated. This mechanism is
similar to pathname expansion, but the filenames generated need not exist. Patterns to be brace
expanded take the form of an optional preamble, followed by either a series of comma-separated
strings or a sequence expression 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, a{d,c,b}e expands into `ade ace abe'.
A sequence expression takes the form {x..y}, where x and y are either integers or single charac-
ters. When integers are supplied, the expression expands to each number between x and y, inclu-
sive. When characters are supplied, the expression expands to each character lexicographically
between x and y, inclusive. Note that both x and y must be of the same type.
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 syn-
tactic interpretation to the context of the expansion or the text between the braces.
A correctly-formed brace expansion must contain unquoted opening and closing braces, and at
least one unquoted comma or a valid sequence expression. Any incorrectly formed brace expansion
is left unchanged. A { or , may be quoted with a backslash to prevent its being considered part
of a brace expression. To avoid conflicts with parameter expansion, the string ${ is not con-
sidered eligible for brace expansion.
This construct is typically used as shorthand when the common prefix of the strings to be gener-
ated 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}}
Brace expansion introduces a slight incompatibility with historical versions of sh. sh does not
treat opening or closing braces specially when they appear as part of a word, and preserves them
in the output. Bash removes braces from words as a consequence of brace expansion. For exam-
ple, a word entered to sh as file{1,2} appears identically in the output. The same word is out-
put as file1 file2 after expansion by bash. If strict compatibility with sh is desired, start
bash with the +B option or disable brace expansion with the +B option to the set command (see
SHELL BUILTIN COMMANDS below).