$(cmd)
nahradí výsledek cmd
jako řetězec, zatímco (cmd; cmd)
spustit seznam příkazů v podprocesu.
Pokud chcete vložit výstup jednoho nebo více příkazů do proměnné, použijte formulář $( cmd ).
Pokud však chcete spustit několik příkazů a zacházet s nimi jako s jednou jednotkou, použijte formulář ().
Poslední možnost je užitečná, když chcete spouštět sadu příkazů na pozadí:
(git pull; make clean; make all) &
To jsou různé věci.
$()
vyhodnotí výraz (provedení příkazu), jako je `` (backticks)
> (echo ls)
ls
> $(echo ls)
file1 file2
> `echo ls`
file1 file2
> echo $(echo ls)
ls
Jsou různé, ale existuje mezi nimi mnemotechnický vztah.
(...)
je příkaz, který spouští nový subshell, ve kterém se spouštějí příkazy shellu.
$(...)
je výraz, který spouští nový subshell, jehož expanze je standardní výstup vytvářený příkazy, které spouští.
To je podobné jinému páru příkaz/výraz v bash
:((...))
je aritmetický příkaz, zatímco $((...))
je aritmetický výraz.