例如,如果我检查$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$