Bash提示符不转换转义字符

Bash提示符不转换转义字符,bash,prompt,iterm2,Bash,Prompt,Iterm2,.profile中的My bash prompt变量如下所示: # $vars # Always display last 2 directories of current path current_dir() { pwd | awk -F\/ '{print $(NF-1),$(NF)}' | sed 's/ /\//g' } # Current git branch parse_git_branch() { git branch 2> /dev/null | sed -e '

.profile
中的My bash prompt变量如下所示:

# $vars
# Always display last 2 directories of current path
current_dir() {
  pwd | awk -F\/ '{print $(NF-1),$(NF)}' | sed 's/ /\//g'
}
# Current git branch
parse_git_branch() {
   git branch 2> /dev/null | sed -e '/^[^​*]/d' -e 's/*​ \(.*\)/ (\1)/'
}

txtblk='\e[0;30m' # Black - Regular
txtred='\e[0;31m' # Red
txtgrn='\e[0;32m' # Green
txtylw='\e[0;33m' # Yellow
txtblu='\e[0;34m' # Blue
txtpur='\e[0;35m' # Purple
txtcyn='\e[0;36m' # Cyan
txtwht='\e[0;37m' # White
bldblk='\e[1;30m' # Black - Bold
bldred='\e[1;31m' # Red
bldgrn='\e[1;32m' # Green
bldylw='\e[1;33m' # Yellow
bldblu='\e[1;34m' # Blue
bldpur='\e[1;35m' # Purple
bldcyn='\e[1;36m' # Cyan
bldwht='\e[1;37m' # White
unkblk='\e[4;30m' # Black - Underline
undred='\e[4;31m' # Red
undgrn='\e[4;32m' # Green
undylw='\e[4;33m' # Yellow
undblu='\e[4;34m' # Blue
undpur='\e[4;35m' # Purple
undcyn='\e[4;36m' # Cyan
undwht='\e[4;37m' # White
bakblk='\e[40m'   # Black - Background
bakred='\e[41m'   # Red
badgrn='\e[42m'   # Green
bakylw='\e[43m'   # Yellow
bakblu='\e[44m'   # Blue
bakpur='\e[45m'   # Purple
bakcyn='\e[46m'   # Cyan
bakwht='\e[47m'   # White
txtrst='\e[0m'    # Text Reset

#           User      Current path (last 2 dirs)    Git branch          Switch to white color
export PS1="$txtcyn\u $txtpur\$(current_dir) $txtgrn\$(parse_git_branch)\[\033[00m\] \n\$ "
因此,我的bash提示符实际上应该显示我的用户名、当前目录和git分支(如果有),然后在新行中显示一个
$
(如上所述)。 但它只是逐字显示字符串,不替换变量或转义字符,如下所示:

我做错了什么


编辑:我在Mac电脑上使用iTerm2

你不能在硬引号内创建转义序列(
'string'
),它们总是按字面解释的

请改为使用双引号(
“string”
),或尝试(
$“string”


如果您选择使用硬引号,您也可以首先避免转义。

您是否参加了新的会话或加载了新的.profile,因为它看起来对我有效。是的。我尝试了
source~/.profile
。我甚至在
.profile
文件的顶部声明了一个测试变量,并在寻源后进行了回显。成功了。所以文件是最新的。顺便说一下,我正在使用iTerm2。也许这有一定的关系。考虑安装一个最新版本的<代码> BASH 并使用<代码> \W以及<代码> PROPTIODRIDRIM<<代码>代替您的代码> Currutydir < /Cuff>函数。这似乎只占了一半。我用双引号替换了所有的单引号,我的bash提示符仍然是这样的:
\e[0;36m\u\e[0;35m$(当前目录)\e[0;32m$(解析git\u分支)\[\033[00m\]\n$
如果我
echo$PS1
它显示:
$(当前目录)$(解析git\u分支)\[\]$\e[0;36m\u\e[0;35m$(当前目录)\[0;32m\u分支)[\]\n$
那么您肯定应该使用ansi-c引用,例如,
$'\033[9m'
。要使格式化输出字符串更容易,请查看。免责声明:我编写了它