.bashrc 和 bash.bashrc 包括:
[ -z "${debian_chroot:-}" ]
Bash 手册页对以下形式的参数扩展进行了说明:${parameter:-word}
如果参数未设置或为空,则替换单词的扩展。否则,替换参数的值。
为什么要写
"${debian_chroot:-}"
而不仅仅是
"${debian_chroot}"
?
我的答案是:https://www.reddit.com/r/Ubuntu/comments/3xb9sp/debian_chroot_why_bother_with/
答案1
您提到的部分出现在 的前面.bashrc
,而副本中提到的部分出现在 的后面一点PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
。但它们是一起起作用的!
那么你提到的代码用简单的英语来说是什么意思呢?这里供参考。
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
它从这部分开始${debian_chroot:-}
。我们是否debian_chroot
设置了该变量?如果是,则回显该变量,但如果没有 - 回显后面的内容-
。后面是什么-
?什么都没有!就是这样!为什么要费心呢?如果设置了变量怎么办?那么我们不需要执行 if 语句的主体,只需使用debian_chroot
变量照原样稍后在 PS1 提示符内。还记得我说过这两段代码一起工作吗?好的,继续。
下一步,如果我们评估变量为空,我们检查是否存在可读/etc/debian_chroot
文件。至少在 Ubuntu 14.04 上,没有/etc/debian_chroot
文件。因此,每当您启动 bash 时,它都会显示“哦,所以 debian_chroot 未设置,我们在那里没有该文件...好的,只在提示符内保留 \u@\h:\w\$!”
如果我们确实有该文件会发生什么情况?
xieerqi:
$ sudo vi /etc/debian_chroot
[sudo] password for xieerqi:
xieerqi:
$ bash
(HELLOWORLD)xieerqi@eagle:~$ echo $debian_chroot
HELLOWORLD
(HELLOWORLD)xieerqi@eagle:~$
好的,再次跟踪代码:我们有debian_chroot
set 吗?没有。我们有那个/etc/debian_chroot
文件吗?是的,所以取出它的内容,并将它们推入此用户PS1
提示符中。看起来这正是我的输出中发生的事情,对吗?