Quando você simplesmente atribui um valor a uma variável, a expressão $(...)
é avaliada, a menos que esteja entre aspas simples (ou com escape de barra invertida). Para entender, tente e compare estes dois:
A=$(pwd)
echo "$A"
B='$(pwd)'
echo "$B"
O valor de A
torna-se imediatamente a string /home/yourusername
e, obviamente, não é lembrado de onde essa string vem, ela permanece a mesma, mesmo que você altere o diretório. O valor de B
, no entanto, torna-se a string literal $(pwd)
sem ser interpretado.
Agora, no valor de PS1
, algo especial acontece: sempre que o prompt é impresso, certas construções especiais são interpretadas, por exemplo, a substituição do comando $(...)
é executada exatamente como aconteceu acima na atribuição à variável A
. Obviamente se seu PS1
contiver a string literal do seu diretório home (como acima com A
), então não há como alterar. Mas se ela contiver a string $(pwd)
(como acima com B
), ela será avaliada sempre que o prompt for impresso e, portanto, o diretório real for exibido.