Bash 为什么在PS1末尾添加\n会导致替换错误?
因此,我在Windows上玩我的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
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”并查看是否可以找到详细的解释。如果提示没有正确解释其长度,则会发生各种奇怪的事情。