在 PS1 中回显文字问号

在 PS1 中回显文字问号

我是 shell 脚本编写的新手,并尝试使用颜色和“?”等字符为自己提供一个很好的提示来显示 git 分支的状态。

当我有新的未跟踪文件时,我希望我的 PS1 是这样的:

p/a/t/h/ (staging ?) $

ie pwd (分支名称空间问号) $

我已将问题简化为以下代码(~/.bashrc):

parseGitBranch () {
     gitBranch=staging
     ifUntrackedFiles="$gitBranch ?"
     echo $ifUntrackedFiles
 }

 PS1="`parseGitBranch` $ "

我的问题是,由于问号之前有空格,PS1 将其视为通配符,并向我显示目录中存在的任何单字母文件。

p/a/t/h/ (staging ?) touch a
p/a/t/h/ (staging ?) source ~/.bashrc
p/a/t/h/ (staging a) $

没有空格它工作得很好,但我仍然想要我的分支名称后面的空格:\

p/a/t/h/ (staging?) $

我也尝试过:

ifUntrackedFiles="$gitBranch"' ?'

echo -e

标记前的反斜杠输出它们(暂存 \?)

PS1 中的问号该如何去掉?

谢谢!

答案1

在 Bourne shell 中,不引用变量(即$var代替"$var")应该是例外。这里的问题是你的echo命令。使用echo ?,?会替换为目录中的每个单字母文件,而使用echo "?", 则按原样显示问号。

那么你的函数应该是:

parseGitBranch () {
     gitBranch=staging
     ifUntrackedFiles="$gitBranch ?"
     echo "$ifUntrackedFiles"
 }

而且,由于反引号很容易与单引号混淆并且难以嵌套,因此请改用$(...)

 PS1='$(parseGitBranch) $ '

相关内容