我这样在.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是一个特殊变量:每次在控制台中显示新行时,都会对该变量进行求值以提取显示设置。

10-04 12:59