The old-style backquotes
` ` do treat backslashes and nesting a bit different. The new-style
$() interprets everything in between
( ) as a command.
echo $(uname | $(echo cat))
echo `uname | `echo cat``
bash: command substitution: line 2: syntax error: unexpected end of file
works if the nested backquotes are escaped:
echo `uname | \`echo cat\``
echo $(echo '\\')
echo `echo '\\'`
$() applies to all POSIX-conformant shells.
As mouviciel pointed out, old-style
` ` might be necessary for older shells.
Apart from the technical point of view, the old-style
` ` has also a visual disadvantage:
- Hard to notice:
I like $(program) better than `program`
- Easily confused with a single quote:
- Not so easy to type (maybe not even on the standard layout of the keyboard)
(and SE uses
` ` for own purpose, it was a pain writing this answer :)