Der Unterschied zwischen einfachen und doppelten Anführungszeichen ist die Interpolation.
Im ersten Beispiel interpoliert die Shell den Ausdruck zwischen den Anführungszeichen, bevor er der PS1-Variablen zugewiesen wird. Der Wert der Variablen wäre also nach der Interpolation der Fall
> /home/user
Im zweiten Beispiel weist die Shell den Ausdruck aufgrund der einfachen Anführungszeichen buchstäblich der Variablen zu. Dies führt zu dem erwarteten Verhalten (bei jedem Ausdruck einer Eingabeaufforderung interpoliert bash den Ausdruck basierend auf dem aktuellen Verzeichnis). Der Wert von PS1 wäre:
\[\e[38;5;46m\]>\[\e[38;5;255m\]\[\e]0;$(pwd)\007\]
Sie können dies leicht mit ein paar Befehlen überprüfen:
$ a='hello' $ b="$ world" $ c='$ world' $ echo $b hello world $ echo $c $ world
In $b
wird die Variable a
in die Zeichenfolge interpoliert, aber in der Zeichenfolge $c
nicht. Daher wird die Zeichenfolge buchstäblich gedruckt.