单引号和双引号中的PS1变量--bashrc

时间:2014-01-19 15:50:45

标签: git bash shell ps1

我已将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中的环境,万一有人想知道。

1 个答案:

答案 0 :(得分:2)

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

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

你会发现差异。