从默认值.bashrc
是:
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
*)
;;
esac
通过发出echo命令检查结果:
$ echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$
似乎${debian_chroot:+($debian_chroot)}
将对命令行提示符执行条件插入,而不对终端标题执行。看来.bashrc
作者希望将其显示在左侧的两个位置,user@host
但实际上并没有同时显示在两个位置。评估是debian_chroot
在定义PS1时发生的,但当时不打算评估,而是在提示时进行评估。问题的根源在于,在构建字符串时,对""
引用进行求值,而对''
引用不进行求值。评估很早,因为其中包含的全部内容\[
\]
都是标题。解释正确吗?
我会说整个事情都是无关紧要的。debian_chroot
设置在中/etc/bash.bashrc
。可以肯定的是,在正常情况下,如果设置了变量,则将启动一个新的外壳程序-为什么会/etc/bash.bashrc
以其他方式获取呢?在这种情况下,~/.bashrc
也将被采购。因此,该变量要么在PS1
您显示的行中设置和修改时设置,否则不设置,也不会设置。效果是一样的。
我只能猜测为什么最初的开发人员在设置PS1
第一位时使用单引号。据推测,开发人员已经学会了谨慎,""
仅在必要时使用它,即在进行修改时使用PS1
。
请注意,:+
如果未设置变量,则仅意味着不执行任何操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句