Интересные бывают находки при переносе старых тем в новый раздел. (: Особенно интересно, что так никто и не ответил.
Думаю, ты тогда всё-таки понял, в чём причина такой, на первый взгляд, странности, но вдруг ещё кому интересно будет..
Дело в том, когда происходит подстановка переменной, и кто эту переменную подставляет. И тут три принципиально разных случая.
Начну с конца.
Здесь две команды. Первая задаёт переменную для текущей оболочки. При выполнении второй текущая же оболочка эту переменную и подставляет _перед_ вызовом самой команды.
В этом случае всё ровно наоборот. Это одна команда. Переменная задаётся не для текущей оболочки, а конкретно для этой команды. Сама переменная закавычена; следовательно, кавычки обрабатываются текущей оболочкой, а переменная достаётся дочерней _неподставленной_ -- и уже та нормально её подставляет: для неё-то переменная задана.
Думаю, тут уже всё понятно из предыдущих объяснений. Переменная здесь, как и во втором рассмотренном случае, передаётся только дочернему процессу -- текущей оболочке она недоступна. Но подстановку-то здесь производит именно текущая оболочка. Потому на выходе и пусто.