Macos \$dons';当我在终端设置PS1时,它似乎不起作用
我正在努力理解如何在我的mac上定制终端。我一直在修改PS1变量,我发现\$似乎不像其他转义字符那样工作。例如,下面是我的终端的一个片段Macos \$dons';当我在终端设置PS1时,它似乎不起作用,macos,terminal,prompt,Macos,Terminal,Prompt,我正在努力理解如何在我的mac上定制终端。我一直在修改PS1变量,我发现\$似乎不像其他转义字符那样工作。例如,下面是我的终端的一个片段 $PS1="\w\$" ~$echo $PS1 \w$ 我的问题是,当我键入echo$PS1时,为什么它显示\w$而不是\w\$?在PS1设置如上所述的情况下,如果我作为超级用户运行终端,我会在bash中看到$or#?,这是OSX上的默认终端外壳,双引号字符串支持一些特殊字符,例如\和$。在表达式“\w\$”中,\$被解释为字符$的转义文字 如果希望$PS1
$PS1="\w\$"
~$echo $PS1
\w$
我的问题是,当我键入
echo$PS1
时,为什么它显示\w$
而不是\w\$
?在PS1设置如上所述的情况下,如果我作为超级用户运行终端,我会在bash中看到$or#?,这是OSX上的默认终端外壳,双引号字符串支持一些特殊字符,例如\
和$
。在表达式“\w\$”
中,\$
被解释为字符$
的转义文字
如果希望$PS1
包含字符串\w\$
,请使用单引号:
PS1='\w\$'
或者,对于双引号,使用\\
表示反斜杠,\$
表示美元符号:
PS1="\\w\\\$"
当
$PS1
设置为\w$
时,提示将始终以$
结尾,甚至以root结尾。当$PS1
设置为\w\$
时,如果有效uid为0,则提示将以#
结束,否则$
此解释是正确的,但有点混乱。为了澄清这一点,当您键入$PS1=“\w\$”
并按enter键时,bash正在评估该行,并立即将\$
更改为$
。然后将其保存到变量PS1中。因此,如果您用另一个反斜杠转义反斜杠,它将被逐字发送到变量。因此,$PS1=“\w\\$”
将在您回显时显示\w\$
。之所以\w
有效,是因为\w不是转义序列。