Le :+
est une forme d' expansion des paramètres :
$ {paramètre: + [mot]} : utilisez une valeur alternative.
Si le paramètre est non défini ou nul, null doit être remplacé; sinon, l'expansion de mot (ou une chaîne vide si mot est omis) doit être remplacée.
En d'autres termes, si la variable $var
est définie, echo ${var:+foo}
sera imprimée foo
et, si ce n'est pas le cas, elle imprimera la chaîne vide.
Le second :
n'a rien de spécial. Il s'agit du caractère utilisé comme séparateur dans la liste des répertoires de $PATH
. Donc, PATH="/usr/local/bin:/usr/bin${PATH:+:${PATH}}"
c'est une façon abrégée d'écrire:
if [ -z "$PATH" ]; then
PATH=/usr/local/bin:/usr/bin
else
PATH=/usr/local/bin:/usr/bin:$PATH
fi
C'est juste une astuce astucieuse pour éviter d'ajouter un supplément :
quand il $PATH
n'est pas défini. Par exemple:
$ PATH="/usr/bin"
$ PATH="/new/dir:$PATH" ## Add a directory
$ echo "$PATH"
/new/dir:/usr/bin
Mais si PATH
n'est pas défini:
$ unset PATH
$ PATH="/new/dir:$PATH"
$ echo "$PATH"
/new/dir:
A :
ajoute lui-même le répertoire courant au $PATH
. L'utilisation PATH="/new/dir${PATH:+:$PATH}"
évite cela. Alors bien sûr, vous pouvez utiliser PATH="${PATH:+${PATH}:}/usr/local/bin:/usr/bin"
si vous le souhaitez, ou vous pouvez utiliser PATH="$PATH:/usr/local/bin:/usr/bin"
si vous préférez. La seule différence est que le premier peut ajouter un extra :
, ajoutant ainsi votre répertoire actuel à votre $PATH
.