Na sua pergunta, você implica que não está citando a linha; isso está claramente errado, porque o espaço separaria a atribuição de argumento "PS1 = [\ u @ \ h" do comando "\ W] \ $". Por favor, entenda que todo personagem é importante.
Enfim, o que você provavelmente está fazendo é usar aspas duplas (") em vez de aspas simples ('). Elas se comportam de maneira muito diferente quando se trata do shell interpretar o que você digitou. Com aspas duplas, ele tentará fazer coisas inteligentes com as seqüências de barra invertida / algum caractere. Para esta tarefa, como não há nada de especial em \ u, \ he \ W, eles são deixados intocados; colchetes podem ter significados especiais em vários lugares, mas não neste caso, para que eles também sejam deixados no lugar; mas como a $
possui vários significados, todos eles especiais, a \$
sequência é interpretada como "ignore a especialidade do cifrão e deixe-o lá", e essa sequência é substituída por um cifrão único não mais analisado.O resultado de tudo isso é atribuído aPS1
, e como há um cifrão literal, e não a \$
sequência mágica quando o shell cria o prompt real, você apenas obtém o cifrão, e não o caractere dependente do usuário efetivo. A análise real é um pouco mais complicada, mas essa é a essência desse 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ê deveria digitar:PS1='[\u@\h \W]\$ '
O que você deve fazer em seguida: Leia algo como este tutorial para saber mais sobre a citação de shell.
PS1=[\u@\h \W]\$
retorna-bash: W]$: command not found
.