A diferença entre aspas simples e aspas duplas é a interpolação.
No primeiro exemplo, o shell interpola a expressão entre aspas duplas antes de atribuí-la à variável PS1, então o valor da variável, após a interpolação, seria
> /home/user
No segundo exemplo, por causa das aspas simples, o shell literalmente atribui a expressão à variável, o que causa o comportamento esperado (sempre que um prompt é impresso, o bash interpola a expressão com base no diretório atual). O valor de PS1 seria:
\[\e[38;5;46m\]>\[\e[38;5;255m\]\[\e]0;$(pwd)$ a='hello'
$ b="${a} world"
$ c='${a} world'
$ echo $b
hello world
$ echo $c
${a} world
7\]
Você pode verificar isso facilmente com alguns comandos:
> /home/user
Em $b
, a variável a
é interpolada na string, mas em $c
não é, então a string é literalmente impressa.