summaryrefslogtreecommitdiff
path: root/shell/brace.txt
diff options
context:
space:
mode:
Diffstat (limited to 'shell/brace.txt')
-rw-r--r--shell/brace.txt50
1 files changed, 50 insertions, 0 deletions
diff --git a/shell/brace.txt b/shell/brace.txt
new file mode 100644
index 0000000..664861b
--- /dev/null
+++ b/shell/brace.txt
@@ -0,0 +1,50 @@
+Brace Expansion
+
+Brace expansion is a mechanism by which arbitrary strings may be gener-
+ated. This mechanism is similar to pathname expansion, but the file-
+names generated need not exist. Patterns to be brace expanded take the
+form of an optional preamble, followed by either a series of comma-sep-
+arated strings or a sequence expression between a pair of braces, fol-
+lowed 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 characters. When integers are supplied, the expres-
+sion expands to each number between x and y, inclusive. When charac-
+ters are supplied, the expression expands to each character lexico-
+graphically 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 char-
+acters 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.
+
+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 expan-
+sion, the string ${ is not considered eligible for brace expansion.
+
+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}}
+
+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 example, a word entered to sh as file{1,2} appears identically in
+the output. The same word is output 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 com-
+mand