我在 CentOS 6.4 上。默认情况下,root 用户的提示有#符号,即它看起来像[root@myserver ~]# .
echo $PS1打印出来[\u@\h \W]\$;但如果我这样做PS1="[\u@\h \W]\$"(这不应该改变什么,AFAICS),我结束了一个提示,看起来像这样:[root@myserver ~]$。
为什么当我尝试自己设置它时(我最终想将其更改为更有用的东西),它是否按$字面解释?几乎我能找到的每个页面(例如,如何:更改/设置 bash 自定义提示 (PS1))都说\$应该#为 root 用户生成 a。
Gab*_*abe 16
在您的问题中,您暗示您根本没有引用该行;这显然是错误的,因为空格会将参数赋值“PS1=[\u@\h”与命令“\W]\$”分开。请意识到每个角色都很重要。
无论如何,您可能正在做的是使用双引号 (") 而不是单引号 (')。在 shell 解释您输入的内容时,它们的行为非常不同。使用双引号,它会尝试用反斜杠/某个字符的序列。对于这个任务,因为 \u、\h 和 \W 没有什么特别之处,所以它们保持不变;方括号可以在不同的地方有特殊的含义,但在这种情况下,所以它们也留在原地;但由于 a$有多种含义,它们都是特殊的,因此该\$序列被解释为“忽略美元符号的特殊性,并将其留在那里”,并且该序列被替换为一个没有进一步解析的单一美元符号。所有这些的结果被分配给PS1,并且由于有一个字面的美元符号,而不是\$shell 构造实际提示时的魔法序列,因此您只会得到美元符号,而不是有效的用户相关字符。实际的解析有点复杂,但这就是这个特定示例的要点。
您输入的内容:PS1="[\u@\h \W]\$ "
shell 分配的内容:PS1 <- "[\u@\h \W]$ "
您想要的内容:PS1 <- "[\u@\h \W]\$ "
您应该输入的内容:PS1='[\u@\h \W]\$ '
您接下来应该做什么:阅读本教程之类的内容以了解有关 shell 引用的更多信息。