Grouping
A grouping command combines multiple commands so they are treated as a single command. This is useful for running several commands together in a pipeline or an and-or list.
Braces
Commands grouped in braces { ... }
run in the current shell environment.
$ { echo "Hello"; echo "World"; }
Hello
World
A group can span multiple lines:
$ {
> echo "Hello"
> echo "World"
> }
Hello
World
Since {
and }
are reserved words, they must appear as separate words. See examples in the Keywords section.
Braces are especially useful for treating several commands as a single unit in pipelines or and-or lists:
Subshells
Commands grouped in parentheses ( ... )
run in a subshell—a copy of the current shell environment. Changes made in a subshell do not affect the parent shell.
$ greeting="Morning"
$ (greeting="Hello"; echo "$greeting")
Hello
$ echo "$greeting"
Morning
Since (
and )
are operators, they can be used without spaces.
Compatibility
Some shells treat two adjacent (
characters specially. For best compatibility, separate open parentheses with a space to nest subshells:
$ ( (echo "Hello"))
Hello