在 bashrc 文件中,颜色变量不适用于 PS1 赋值

在 bashrc 文件中,颜色变量不适用于 PS1 赋值

下面是我当前的 PS 字符串.bashrc

PS1='${debian_chroot:+($debian_chroot)}\[\033[00;37m\]\u@\h\[\033[01;32m\]:\[\033[01;34m\]\w\[\033[01;31m\] $(parse_git_branch)\[\033[00m\]\$

效果很好

终端彩壳

但由于颜色有限,编写单一颜色代码非常困难;因此创建一些变量并尝试使用它们,如下所示

RED='\[\033[01;31m\]'
YELLOW='\[\033[01;33m\]'
GREEN='\[\033[01;32m\]'
BLUE='\[\033[01;34m\]'
GREY='\[\033[01;37m\]'
WHITE='\[\033[00m\]'


PS1='${debian_chroot:+($debian_chroot)}${GREY}\u@\h${GREEN}:${BLUE}\w${RED} $(parse_git_branch)${WHITE}$ '

但这不起作用并显示字符本身

在终端上显示字符

那么,我们如何在这里使用变量?

附加查询

  • 我们可以使用哪些其他颜色代码?

  • 有人用;\e代替\033,这样也能用吗?任何参考资料都会有帮助

答案1

首先,一般来说,避免使用大写字母作为您自己的 shell 变量名。按照惯例,全局环境变量是大写的,因此如果您也将自己的变量也大写,则会导致命名冲突和奇怪的错误。

但这里真正的问题是您将变量放在单引号中,这意味着它们不会被展开。请尝试以下方法:

red='\[\033[01;31m\]'
yellow='\[\033[01;33m\]'
green='\[\033[01;32m\]'
blue='\[\033[01;34m\]'
grey='\[\033[01;37m\]'
white='\[\033[00m\]'



PS1="${debian_chroot:+($debian_chroot)}${grey}\u@\h${green}:${blue}\w${red} $(parse_git_branch)${white}$ "

注意我是如何使用的"PS1="..."这是重点部分。单引号中的变量是受保护的:

$ var="foo"
$ echo '$var'
$var

但在双引号中,它们会被展开:

$ echo "$var"
foo

相关内容