Em sua pergunta, você insinua que não está citando a linha; isso está claramente errado, porque então o espaço separaria a atribuição de argumento "PS1 = [\ u @ \ h" do comando "\ W] \ $". Por favor, perceba que todo personagem é importante.
De qualquer forma, o que você provavelmente está fazendo é usar aspas duplas (") ao invés de simples ('). Elas se comportam de maneira muito diferente quando se trata de interpretar o que você digitou. Com aspas duplas, ele tentará fazer coisas inteligentes com as seqüências de barra invertida / alguns caracteres.Nesta atribuição, uma vez que não há nada de especial sobre \ u, \ h e \ W, eles são deixados intactos, colchetes podem ter significados especiais em vários lugares, mas não em Nesse caso, eles também são deixados no lugar, mas como um $
tem vários significados, todos eles especiais, a sequência \$
é interpretada como "ignorar o caráter especial do cifrão e simplesmente deixá-lo lá ", e essa seqüência é substituída por um sinal de dólar único não mais analisado. O resultado de tudo isso é atribuído a PS1
, e já que há um sinal de dólar literal, e não a seqüência mágica \$
quando shell constrói o prompt real, você acabou de obter o sinal de dólar, e não o caractere efetivo dependente do usuário. a análise é um pouco mais complicada, mas essa é a essência dela para esse exemplo em particular.
O que você digitou: PS1="[\u@\h \W]\$ "
O que o shell atribuiu: PS1 <- "[\u@\h \W]$ "
O que você queria: PS1 <- "[\u@\h \W]\$ "
O que você deve digitar: PS1='[\u@\h \W]\$ '
O que você deve fazer em seguida: leia algo como este tutorial para saber mais sobre o shell que cita.