【问题标题】:How can this PS1 variable be defined in single-quotes?这个 PS1 变量如何用单引号定义?
【发布时间】:2014-07-15 18:15:19
【问题描述】:

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

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

让我感到困惑的是${debian_chroot} 部分。根据StackOverflow: Difference between single and double quotes in bash,如果在定义字符串时使用单引号,则应将$ 等字符视为文字,而不是评估变量。

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

【问题讨论】:

    标签: bash syntax quotes ps1


    【解决方案1】:

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

    PS1='$PWD: ' 将在显示提示时展开$PWD,以便您始终看到当前目录。

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

    【讨论】:

    • 这是一个小问题,但是当显示提示时,PS1 的值如何“再次扩展”?哪些代码行可以实现这一点?
    • 它实际上是一种完全独立的扩展模式 (source code),它同时处理反斜杠扩展和 $ 类型扩展(取决于 promptvars shell 选项)。没有通过 bash 代码复制相同功能的好方法。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 2019-12-13
      • 1970-01-01
      • 1970-01-01
      • 2020-01-31
      • 1970-01-01
      相关资源
      最近更新 更多