如何在单引号中定义此PS1变量?

时间:2014-05-26 23:55:32

标签: bash syntax quotes ps1

基于Debian的系统的默认.bashrc文件设置$PS1,如下所示:

PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

让我感到困惑的是${debian_chroot}部分。根据{{​​3}},如果在定义字符串时使用单引号,则应将$等字符视为文字,而不是评估变量。

这是不是意味着Bash应实际打印出${debian_chroot:...,而不是该变量的值?或者这里涉及更多语法规则?

2 个答案:

答案 0 :(得分:5)

您通常是正确的,除了PS1的值在运行时再次展开,作为生成提示的一部分。这特别是为了允许在运行时进行扩展。

显示提示时,

PS1='$PWD: '将展开$PWD,以便您始终可以看到当前目录。

定义提示后,

PS1="$PWD: "将展开$PWD,以便您在定义提示时始终可以看到您所在的目录。

答案 1 :(得分:0)

每次使用PROMPT_COMMAND时,使用PS1设置值通常更为简单。这样,您就不必在PS1本身中转义代码。

make_prompt () {
    PS1="${debian_chroot:+($debian_chroot)}\u@\h:\w\$ "
}

PROMPT_COMMAND='make_prompt'