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

时间:2013-05-07 03:28:52

标签: bash eval curly-braces

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

1 个答案:

答案 0 :(得分: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如果已经设置,否则为空字符串。