Difference between $() and () in Bash Difference between $() and () in Bash bash bash

Difference between $() and () in Bash


$(cmd) substitutes the result of cmd as a string, whereas (cmd; cmd) run a list of commands in a subprocess.

If you want to put the output of one or more commands into a variable use the $( cmd ) form.

However if you want to run a number of commands and treat them as a single unituse the () form.

The latter is useful when you want to run a set of commands in the background:

(git pull; make clean; make all) &


Those are different things.

$() evaluates an expression (executing a command) like `` (backticks)

> (echo ls)ls> $(echo ls)file1  file2> `echo ls`file1  file2> echo $(echo ls)ls


They are different, but there is a mnemonic relationship between them.

(...) is a command that starts a new subshell in which shell commands are run.

$(...) is an expression that starts a new subshell, whose expansion is the standard output produced by the commands it runs.

This is similar to another command/expression pair in bash: ((...)) is an arithmetic statement, while $((...)) is an arithmetic expression.