5

.bashrc以下の部分に示されている私のubuntuに書かれていることを理解するのが少し難しいです。ここに私が理解していないものがあります:

  • 中括弧と-/の+後に使用される記号の目的は何:ですか? (例: ${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

2 番目のものは少し奇妙に思えるかもしれませんが、コード スニペットは典型的な使用法を示しています。

${debian_chroot:+($debian_chroot)}

これは、「$debian_chroot が定義されている場合は、括弧内に挿入する」ことを意味します。

上記の「定義済み」は、「null 以外の値に設定する」ことを意味します。Unix シェルは通常、未設定の変数と空の文字列に設定された変数を区別しませんが、未設定の変数が使用された場合、bash にエラー状態を発生させるように指示できます。(これは で行いset -uます。) この場合、debian_chrootが設定されていない場合は$debian_chrootエラーが発生し、設定されている場合は while${debian_chroot:-}が使用$debian_chrootされ、設定されていない場合は空の文字列になります。

于 2013-05-07T04:19:15.977 に答える