Trong câu hỏi của bạn, bạn ngụ ý rằng bạn không trích dẫn dòng nào cả; điều đó rõ ràng sai, bởi vì sau đó khoảng trắng sẽ phân tách phép gán đối số "PS1 = [\ u @ \ h" khỏi lệnh "\ W] \ $". Hãy nhận ra rằng mọi nhân vật đều quan trọng.
Dù sao, những gì bạn có thể đang làm là sử dụng dấu ngoặc kép (") chứ không phải là dấu ngoặc đơn ('). Chúng hoạt động rất khác nhau khi nói đến trình diễn diễn giải những gì bạn đã nhập. Với dấu ngoặc kép, nó sẽ cố gắng làm những điều thông minh với Các chuỗi dấu gạch chéo ngược / một số ký tự. Đối với nhiệm vụ này, vì không có gì đặc biệt về \ u, \ h và \ W, chúng không bị ảnh hưởng; dấu ngoặc vuông có thể có ý nghĩa đặc biệt ở nhiều nơi, nhưng không phải trong trường hợp này, vì vậy chúng cũng được đặt đúng chỗ, nhưng vì $
có nhiều ý nghĩa khác nhau, tất cả đều đặc biệt, nên \$
trình tự được hiểu là "bỏ qua tính đặc biệt của ký hiệu đô la và để nó ở đó", và chuỗi đó được thay thế bằng một ký hiệu đô la không phân tích cú pháp nữa. Kết quả của tất cả những điều đó được gán choPS1
và vì có ký hiệu đô la theo nghĩa đen và không phải là \$
chuỗi ma thuật khi trình bao xây dựng dấu nhắc thực tế, bạn chỉ nhận được ký hiệu đô la chứ không phải ký tự phụ thuộc vào người dùng hiệu quả. Việc phân tích cú pháp thực tế phức tạp hơn một chút, nhưng đó là ý chính của ví dụ cụ thể này.
Những gì bạn đã nhập: PS1="[\u@\h \W]\$ "
Những gì vỏ được gán: PS1 <- "[\u@\h \W]$ "
Những gì bạn muốn: PS1 <- "[\u@\h \W]\$ "
Những gì bạn nên gõ:PS1='[\u@\h \W]\$ '
Những gì bạn nên làm tiếp theo: Đọc một cái gì đó như hướng dẫn này để tìm hiểu thêm về trích dẫn shell.
PS1=[\u@\h \W]\$
trả lại-bash: W]$: command not found
.