:+形式でパラメータ展開:
$ {parameter:+ [word]}:代替値を使用します。
パラメーターが未設定またはヌルの場合、ヌルが置き換えられます。それ以外の場合は、単語の展開(または、単語が省略された場合は空の文字列)に置き換えられます。
つまり、変数$varが定義されている場合echo ${var:+foo}は印刷され、定義されfooていない場合は空の文字列が印刷されます。
2番目:は特別なものではありません。これは、のディレクトリのリストで区切り文字として使用される文字$PATHです。だから、PATH="/usr/local/bin:/usr/bin${PATH:+:${PATH}}"簡単な書き方です:
if [ -z "$PATH" ]; then
PATH=/usr/local/bin:/usr/bin
else
PATH=/usr/local/bin:/usr/bin:$PATH
fi
設定されていない:場合に余分な追加を避けるのは、巧妙なトリック$PATHです。例えば:
$ PATH="/usr/bin"
$ PATH="/new/dir:$PATH" ## Add a directory
$ echo "$PATH"
/new/dir:/usr/bin
しかし、PATH設定されていない場合:
$ unset PATH
$ PATH="/new/dir:$PATH"
$ echo "$PATH"
/new/dir:
A :自体は、現在のディレクトリをに追加し$PATHます。使用するとPATH="/new/dir${PATH:+:$PATH}"これを回避できます。必要にPATH="${PATH:+${PATH}:}/usr/local/bin:/usr/bin"応じて使用することも、必要に応じて使用PATH="$PATH:/usr/local/bin:/usr/bin"することもできます。唯一の違いは、前者が余分なものを追加する可能性があるという:こと$PATHです。