W swoim pytaniu sugerujesz, że wcale nie cytujesz linii; to jest oczywiście błędne, ponieważ wówczas spacja oddzieliłaby przypisanie argumentu „PS1 = [\ u @ \ h” od polecenia „\ W] \ $”. Pamiętaj, że każda postać jest ważna.
W każdym razie to, co prawdopodobnie robisz, to używanie podwójnych cudzysłowów („) zamiast pojedynczych ('). Zachowują się bardzo różnie, jeśli chodzi o powłokę interpretującą to, co wpisałeś. W przypadku podwójnych cudzysłowów spróbuje robić sprytne rzeczy za pomocą sekwencje odwrotnego ukośnika / jakiegoś znaku. W przypadku tego przypisania, ponieważ nie ma nic specjalnego w \ u, \ hi \ W, są one nietknięte; nawiasy kwadratowe mogą mieć specjalne znaczenie w różnych miejscach, ale nie w tym przypadku, więc są one również pozostawione na miejscu, ale ponieważ $
ma wiele znaczeń, wszystkie są wyjątkowe, \$
sekwencja jest interpretowana jako „zignoruj specjalność znaku dolara i po prostu zostaw ją tam”, a sekwencja ta zostanie zastąpiona przez pojedynczy znak dolara bez dalszego analizowania. Wynik tego wszystkiego jest przypisany doPS1
, a ponieważ istnieje dosłowny znak dolara, a nie magiczna \$
sekwencja, gdy powłoka konstruuje rzeczywistą podpowiedź, otrzymujesz po prostu znak dolara, a nie postać zależną od efektywnego użytkownika. Rzeczywiste parsowanie jest nieco bardziej skomplikowane, ale to jest sedno tego w tym konkretnym przykładzie.
Co wpisałeś: PS1="[\u@\h \W]\$ "
Co przypisała powłoka: PS1 <- "[\u@\h \W]$ "
Co chciałeś: PS1 <- "[\u@\h \W]\$ "
Co powinieneś wpisać:PS1='[\u@\h \W]\$ '
Co należy zrobić dalej: Przeczytaj coś w tym samouczku, aby dowiedzieć się więcej o cytowaniu powłoki.
PS1=[\u@\h \W]\$
zwraca-bash: W]$: command not found
.