当前位置:  开发笔记 > 编程语言 > 正文

理解这个.bashrc脚本(花括号,eval,......)

如何解决《理解这个.bashrc脚本(花括号,eval,)》经验,为你挑选了1个好方法。

我很难理解我的ubuntu中写的.bashrc内容,如下所示.这是我不明白的:

花括号和后面使用的-/ +符号的目的是什么:?(例如:$ {debian_chroot: - }和$ {debian_chroot:+($ debian_chroot)})

eval命令.

以下代码片段如何工作.

[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

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

rici.. 10

${var:-default} 手段 $var if $var is defined and otherwise "default"

${var:+value} 手段 if $var is defined use "value"; otherwise nothing

第二个可能看起来有点奇怪,但你的代码片段显示了一个典型的用法:

${debian_chroot:+($debian_chroot)}

这意味着"如果定义$ debian_chroot,则将其插入括号中."

上面,"已定义"表示"设置为某些非空值".Unix shell通常不区分未设置的变量和设置为空字符串的变量,但是如果使用未设置的变量,则可以告诉bash引发错误条件.(你这样做set -u.)在这种情况下,如果debian_chroot从未设置过,$debian_chroot将导致错误,而如果已设置${debian_chroot:-}则使用$debian_chroot,否则为空字符串.



1> rici..:

${var:-default} 手段 $var if $var is defined and otherwise "default"

${var:+value} 手段 if $var is defined use "value"; otherwise nothing

第二个可能看起来有点奇怪,但你的代码片段显示了一个典型的用法:

${debian_chroot:+($debian_chroot)}

这意味着"如果定义$ debian_chroot,则将其插入括号中."

上面,"已定义"表示"设置为某些非空值".Unix shell通常不区分未设置的变量和设置为空字符串的变量,但是如果使用未设置的变量,则可以告诉bash引发错误条件.(你这样做set -u.)在这种情况下,如果debian_chroot从未设置过,$debian_chroot将导致错误,而如果已设置${debian_chroot:-}则使用$debian_chroot,否则为空字符串.


@Gradient如果使用`set -u`,则尝试使用unset变量将被视为错误,而不是扩展为空字符串.`$ {debian_chroot: - }`将显式地将未设置的变量扩展为空字符串,从而避免该错误.
推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有