3.2.6 Grouping Commands
Bash provides two ways to group a list of commands to be executed
as a unit. When commands are grouped, redirections may be applied
to the entire command list. For example, the output of all the
commands in the list may be redirected to a single stream.
()
-
( list )
Placing a list of commands between parentheses causes a subshell
to be created, and each of the commands in list to be executed
in that subshell. Since the list is executed in a subshell,
variable assignments do not remain in effect after the subshell completes.
{}
-
{ list; }
Placing a list of commands between curly braces causes the list to
be executed in the current shell context. No subshell is created.
The semicolon (or newline) following list is required.
In addition to the creation of a subshell, there is a subtle difference
between these two constructs due to historical reasons. The braces
are reserved words
, so they must be separated from the list
by blank
s. The parentheses are operators
, and are
recognized as separate tokens by the shell even if they are not separated
from the list by whitespace.
The exit status of both of these constructs is the exit status of
list.