Разница между ними заключается в удалении цитаты. Со страницы руководства,
Цитата Удаление
После предыдущих расширений, все вхождения без кавычек символов \, 'и', которые не были результатом
одно из вышеперечисленных расширений удалено.
В $(cat test.sh)
конечная команда содержит символы "
без кавычек, полученные в результате подстановки команды. Подстановка команды произвела export X="test"
, которая разбивается на командное слово export
и его буквальный аргумент X="test"
.
В export X="test"
команда снова export
с аргументом X="test"
, , но эти кавычки не заключены в кавычки и не были созданы никакими расширениями, поэтому они удаляются. В результате команда export
получает X=test
(не X="test"
) в качестве аргумента.
Каждая команда export
затем разделяет свой аргумент на =
, видя X
в качестве определяемой переменной. Один видит правую часть test
для использования в качестве значения, другой видит "test"
для использования в качестве значения, что приводит к различным присваиваниям, которые вы наблюдали.