Alguns documentos ajudarão a explicar isso.
Do documento de padrões POSIX para o shell :
The following variables shall affect the execution of the shell:
PS1: Each time an interactive shell is ready to read a command, the value of this variable shall be subjected to parameter expansion and written to standard error.
...
Single-Quotes
Enclosing characters in single-quotes shall preserve the literal value of each character within the single-quotes.
...
Double-Quotes
Enclosing characters in double-quotes shall preserve the literal value of all characters within the double-quotes, with the exception of
$: The dollar sign shall retain its special meaning introducing parameter expansion
...
Escape Character (Backslash)
A backslash that is not quoted shall preserve the literal value of the following character.
Portanto, o valor de PS1 está sujeito à expansão de parâmetros, e é isso que você quer, então $PWD
será avaliado toda vez que você receber uma solicitação. Isso significa que precisa haver uma string $PWD
real no valor de PS1.
Mas,
export PS1="$PWD $ "
colocará o valor de PWD no momento em que a instrução de exportação for executada no PS1. PS1 será algo como /home/poldie $
e nunca mudará depois disso. Você não quer isso.
export PS1="\$PWD $ "
A barra invertida irá citar o $
, de modo que PS1 contenha a string literal $PWD $
. Você quer isso.
export PS1='$PWD $ '
fará o mesmo. Os parâmetros não são expandidos quando estão entre aspas simples.