Какая разница между $(...) и `...`

Вопрос прост, как указано в названии: Какая разница между двумя следующими выражениями?

$(...)
`...`

Например, две переменные 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