【问题标题】:PS1 variable in single and double quotes - bashrc单引号和双引号中的 PS1 变量 - bashrc
【发布时间】:2014-01-19 15:50:45
【问题描述】:

我已将bashrc 文件设置如下(用于Git Bash

source ~/git-prompt.sh
source ~/git-completion.bash
export GIT_PS1_SHOWDIRTYSTATE=true
PS1='\[\e[0;37m\]\342\224\214\342\224\200[\[\e[0m\]\[\e[1;32m\]\u\[\e[0;37m\]:\[\e[1;34m\]\h\[\e[0;37m\]]\342\224\200[\[\e[33m\]\W\[\e[0;37m\]]\342\224\200[\[\e[1;33m\]\@\[\e[0m\]]$(__git_ps1)\n\[\e[0;37m\]\342\224\224\342\224\200\342\224\200\[\e[1;36m\]\$\[\e[0m\] '

忽略八进制字符,它缩短为:

PS1='\[\e[0;37m\]-[\[\e[0m\]\[\e[1;32m\]\u\[\e[0;37m\]:\[\e[1;34m\]\h\[\e[0;37m\]]-[\[\e[33m\]\W\[\e[0;37m\]]-[\[\e[1;33m\]\@\[\e[0m\]]$(__git_ps1)\n\[\e[0;37m\]-\[\e[1;36m\]\$\[\e[0m\] '

这很好用,除了当我尝试使用以下段获取命令状态符号时(如 ArchWiki 所示):

\$([[ \$? != 0 ]] && echo \"[\[\e[1;31m\]X\[\e[0;37m\]]-\") # again, shortened the octal codes for readability

我注意到的唯一不同是在 ArchWiki 上使用双引号而在我的例子中使用单引号。所以,我也在我的文件中使用了双引号:

PS1="\[\e[0;37m\]\$([[ \$? != 0 ]] && echo \"[\[\e[1;31m\]X\[\e[0;37m\]]-\")-[\[\e[0m\]\[\e[1;32m\]\u\[\e[0;37m\]:\[\e[1;34m\]\h\[\e[0;37m\]]-[\[\e[33m\]\W\[\e[0;37m\]]-[\[\e[1;33m\]\@\[\e[0m\]]$(__git_ps1)\n\[\e[0;37m\]-\[\e[1;36m\]\$\[\e[0m\] "

然后包含上述代码段:

PS1="\[\e[0;37m\]-[\[\e[0m\]\[\e[1;32m\]\u\[\e[0;37m\]:\[\e[1;34m\]\h\[\e[0;37m\]]-[\[\e[33m\]\W\[\e[0;37m\]]-[\[\e[1;33m\]\@\[\e[0m\]]$(__git_ps1)\n\[\e[0;37m\]-\[\e[1;36m\]\$\[\e[0m\] "

这很好用,只是我的 git-auto-completion 不再起作用。如果我进入一个 git 存储库,$(__git_ps1) 不会返回任何内容。如果我从 git repo 中重新启动 bash,它会显示当前分支,但在我离开目录或切换分支时再次无法执行。

以下说法有区别吗:

x="yzx"
x='yzx'

PS

Windows 7 中的环境,以防万一。

【问题讨论】:

    标签: git bash shell ps1


    【解决方案1】:

    在您的情况下,您有许多使用\ 的转义字符。 "..."'...' 之间的区别在于,shell 在双引号内窥视以解释转义序列,而在单引号的情况下,它从字面上看反斜杠。请尝试以下操作:

    echo '\$foo'
    echo "\$foo"
    

    你会看到不同的。

    【讨论】:

    • 具体来说,$(__git_ps1) 被替换当 PS1 被定义时由于双引号。相反,您希望在显示提示之前延迟评估,因此单引号会更合适。
    猜你喜欢
    • 1970-01-01
    • 2018-09-02
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 2011-05-08
    • 1970-01-01
    相关资源
    最近更新 更多