我是 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) $ '