В своем вопросе вы подразумеваете, что вообще не цитируете строку; это явно неправильно, потому что тогда пробел будет отделять назначение аргумента "PS1 = [\u @\h" от команды "\W]\$". Пожалуйста, поймите, что каждый персонаж важен.
В любом случае, вероятно, вы используете двойные кавычки ("), а не одинарные ('). Они ведут себя очень по-разному, когда дело доходит до интерпретации оболочки, что вы набрали. С двойными кавычками, он будет пытаться делать умные вещи с последовательностями обратной косой черты / некоторых символов. Для этого назначения, поскольку в \u, \h и \W нет ничего особенного, они остаются нетронутыми; квадратные скобки могут иметь особое значение в разных местах, но не в этом случае, поэтому они также остаются на месте; но так как $
имеет множество значений, все они особенные, последовательность \$
интерпретируется как «игнорируйте особенность знака доллара и просто оставьте его там», и эта последовательность заменяется на анализ без дальнейшего один знак доллара. Результат всего этого присваивается PS1
, и, поскольку существует буквальный знак доллара, а не волшебная последовательность \$
, когда оболочка создает фактическое приглашение, вы просто получаете знак доллара, а не символ, зависящий от эффективного пользователя , Фактический синтаксический анализ немного сложнее, но это суть этого конкретного примера.
Что вы ввели: PS1="[\u@\h \W]\$ "
Что назначил оболочка: PS1 <- "[\u@\h \W]$ "
Что вы хотели: PS1 <- "[\u@\h \W]\$ "
Что вы должны ввести: PS1='[\u@\h \W]\$ '
Что вы должны делать дальше: прочитайте что-то вроде этого урока, чтобы узнать больше о цитировании оболочки.