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