Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos \$dons';当我在终端设置PS1时,它似乎不起作用_Macos_Terminal_Prompt - Fatal编程技术网

Macos \$dons';当我在终端设置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

我正在努力理解如何在我的mac上定制终端。我一直在修改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不是转义序列。