Como você usou aspas duplas ao definir PS1
, a substituição da variável é avaliada no ponto em que você atribui a variável. Então você acabou definindo PS1
para \u$hello
. O shell expande as variáveis antes de exibir o prompt e, como você não tem nenhuma variável chamada hello
, essa parte do prompt é expandida para a string vazia.
Se você definir PS1
usando aspas simples, a substituição de variável não será executada nesse ponto. Isso fará com que a parte $var
seja avaliada quando o prompt for mostrado, o que significa que ele não selecionará a variável local que você definiu na função shell.
A terceira opção que deve funcionar com uma variável local a partir de uma função shell é escapar dos meta-caracteres:
PS1="\u\$$var"
Isso deve resultar em PS1 sendo definido como \u$hello
. O final do prompt não será alterado quando a variável var
for alterada neste caso.