:+
形式でパラメータ展開:
$ {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
です。