Вопрос прост, как указано в названии: Какая разница между двумя следующими выражениями?
$(...)
`...`
Например, две переменные test1 и test2 разные?
test1=$(ls)
test2=`ls`
Ответ 1
Результат тот же, но новый синтаксис $() намного яснее и легче читать. По крайней мере, вдвойне, когда пытаешься гнездиться. Вложение с помощью старого синтаксиса непросто, но отлично работает с новым.
Для сравнения:
$ echo $(ls $(pwd))
против
$ echo `ls \`pwd\``
Вам нужно избегать встроенных обратных тактов, поэтому это намного сложнее как для типа, так и для чтения.
Согласно эта страница, есть хотя бы одно незначительное отличие в том, как они обрабатывают встроенные двойные обратные косые черты.
Ответ 2
Возможно, вы захотите прочитать man bash:
Когда используется форма замещения в стиле старого образца, обратная косая черта сохраняет свое буквальное значение, за исключением случаев, когда следуют $, `, или. Первый backquote, которому не предшествует обратная косая черта, завершает замену команды. При использовании формы $(command) все символы между круглыми скобками составляют команду; ни один из них не рассматривается специально.
Это в разделе "Command Substitution" manpage.
Ответ 3
Использование `` `является историческим синтаксисом, POSIX принял теперь стандартный синтаксис` $(...). См. Раздел 2.6.3