5

我很难理解我的 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
    
4

1 回答 1

11

${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,否则为空字符串。

于 2013-05-07T04:19:15.977 回答