Bash 为什么在PS1末尾添加\n会导致替换错误?

Bash 为什么在PS1末尾添加\n会导致替换错误?,bash,git-bash,ps1,Bash,Git Bash,Ps1,因此,我在Windows上玩我的PS1,用于Git bash 我的PS1如下所示: PS1=“\n\[\033[01;35m\]\u@\h\[\033[01;34m\]$PWD\[\033[00m\]\[\033[01;32m\]$([uu git\u PS1”(%s)”)\[\033[00m\]\nλ” 然后,我注意到在更改分支时,分支名称没有更新,并找到了,这告诉我将双引号替换为单引号 现在,我的PS1如下所示: PS1='\n\[\033[01;35m\]\u@\h\[\033[01;3

因此,我在Windows上玩我的
PS1
,用于Git bash

我的
PS1
如下所示:

PS1=“\n\[\033[01;35m\]\u@\h\[\033[01;34m\]$PWD\[\033[00m\]\[\033[01;32m\]$([uu git\u PS1”(%s)”)\[\033[00m\]\nλ”
然后,我注意到在更改分支时,分支名称没有更新,并找到了,这告诉我将双引号替换为单引号

现在,我的
PS1
如下所示:

PS1='\n\[\033[01;35m\]\u@\h\[\033[01;34m\]$PWD\[\033[00m\]\[\033[01;32m\]$(\uu git\u PS1”(%s)\[\033[00m\]\nλ'
突然,我在执行
时收到警告。bashrc

bash: command substitution: line 1: syntax error near unexpected token `)'
bash: command substitution: line 1: `__git_ps1 "(%s)")'
进一步的调查表明,当我在
PS1
定义末尾的
λ
之前删除
\n
时,警告消失

谁能回答我:

  • 到底是什么原因导致了此警告(在我看来,结尾处的
    \n
    似乎与执行
    \uu git\u ps1
    完全无关)
  • 要删除警告,我需要更改什么

编辑 当我将
$(%s)
更改为
`` git\u ps1”(%s)`
时,警告消失,一切正常……

解决方案

NEWLINE=”
"
PS1='\[\033[01;35m\]\u@\h\[\033[01;34m\]$PWD\[\033[01;32m\]$(UU git\u PS1)\[\033[00m\]$新线λ'
换行符出现问题,重新设置颜色会使换行符过长

问题的最小样本:

PS1='$(日期)\n$'

看起来变量替换有问题。

我怀疑提示中的非打印字符有问题,需要转义,以便提示可以正确说明其在终端中的长度。请参阅(上2)。我知道有更好的提示教程可以更好地解释这一点。您可以搜索“bash prompt escape non-printing characters”并查看是否可以找到详细的解释。如果提示没有正确解释其长度,则会发生各种奇怪的事情。