$PS1环境变量中的$是什么意思?

$PS1环境变量中的$是什么意思?

例如,如果我检查$PS1变量,我会得到它:

[root@ENGDADOS ~]# echo $PS1
[\u@\h \W]\$

但是如果我重新输入这个确切的变量,它会从#(root)更改为$(通常是普通用户)

[root@ENGDADOS ~]# export PS1="[\u@\h \W]\$ "
[root@ENGDADOS ~]$

如何重新输入此环境变量而不更改 from#$?这个配置在哪里?

答案1

$字符在双引号和其他上下文中具有特殊含义,用于参数(变量)和命令扩展。在这些上下文中,\用于转义特殊字符,即按字面解释它们。例如:

$ a="1 2"
$ b="0 $a 3"
$ echo "$b"
0 1 2 3
$ b="0 \$a 3"
$ echo "$b"
0 $a 3

为了\$在末尾包含文字字符串PS1,您必须使用单引号来禁用特殊的 shell 结构,或者转义\$

$ PS1='[\u@\h \W]\$'
$ PS1="[\u@\h \W]\\\$"

如果您使用的是 Bash,我建议您使用declare -p来检查变量,因为它还可能包含尾随空格,而您在使用echo.

[root@hostname ~]# declare -p PS1
declare -- PS1="[\\u@\\h \\W]\\\$ "

在Bash中PS1一般是在~/.bashrc文件中定义。

答案2

使用单引号。

比较:

root@d313d6954dee:/# echo '\u@\h:\w\$ '
\u@\h:\w\$
root@d313d6954dee:/# echo "\u@\h:\w\$ "
\u@\h:\w$

相关内容