Разница между одинарными и двойными кавычками заключается в интерполяции.
В первом примере оболочка интерполирует выражение между двойными кавычками, прежде чем присвоить его переменной PS1, поэтому значение переменной после интерполяции будет равно
> /home/user
Во втором примере из-за одинарных кавычек оболочка буквально присваивает выражение переменной, что вызывает ожидаемое поведение (каждый раз, когда выводится приглашение, bash интерполирует выражение на основе текущего каталога). Значение PS1 будет:
\[\e[38;5;46m\]>\[\e[38;5;255m\]\[\e]0;$(pwd)\007\]
Вы можете легко проверить это с помощью пары команд:
$ a='hello' $ b="$ world" $ c='$ world' $ echo $b hello world $ echo $c $ world
В $b
, переменная a
интерполируется в строку, но в $c
нее нет, поэтому строка печатается буквально.