我这样在.bash_profile
中设置提示
export PS1="\w\$(getBranchName)\n ---->"
我的
getBranchName
函数存在,并且可以正常工作。我的问题是,为什么我需要像这样的
getBranchName
转义对\$(getBranchName)
的调用。换句话说,为什么这段代码不起作用?
export PS1="\w$(getBranchName)\n ---->"
如果好奇的话,这就是
getBranchName
函数的样子esc="\033"
redf="${esc}[31m"
green="${esc}[32m"
purple="${esc}[35m"
cyanf="${esc}[36m"
reset="${esc}[0m"
getBranchName() {
if [[ "$(__git_ps1 '%s')" == "master" ]]
then
echo -e "${redf}$(__git_ps1)${reset}";
else
echo -e "${cyanf}$(__git_ps1)${reset}";
fi
}
export PS1="\w\$(getBranchName)\n ---->"
最佳答案
您需要转义美元,因为您要将这个确切的文本存储在变量中。
键入echo "$PS1"
尝试一下。您应该看到确切的文本:\w$(getBranchName)\n ---->
如果不进行转义,则该函数在分配期间仅被评估一次。
最重要的是PS1
是一个特殊变量:每次在控制台中显示新行时,都会对该变量进行求值以提取显示设置。