El :+
es una forma de expansión de parámetros :
$ {parámetro: + [palabra]} : Usar valor alternativo.
Si el parámetro no está establecido o es nulo, se sustituirá nulo; de lo contrario, se sustituirá la expansión de la palabra (o una cadena vacía si se omite la palabra).
En otras palabras, si la variable $var
está definida, echo ${var:+foo}
imprimirá foo
y, si no lo está, imprimirá la cadena vacía.
El segundo :
no es nada especial. Es el carácter utilizado como separador en la lista de directorios en $PATH
. Entonces, PATH="/usr/local/bin:/usr/bin${PATH:+:${PATH}}"
es una forma abreviada de escribir:
if [ -z "$PATH" ]; then
PATH=/usr/local/bin:/usr/bin
else
PATH=/usr/local/bin:/usr/bin:$PATH
fi
Es solo un truco inteligente para evitar agregar un extra :
cuando $PATH
no está configurado. Por ejemplo:
$ PATH="/usr/bin"
$ PATH="/new/dir:$PATH" ## Add a directory
$ echo "$PATH"
/new/dir:/usr/bin
Pero si no PATH
está configurado:
$ unset PATH
$ PATH="/new/dir:$PATH"
$ echo "$PATH"
/new/dir:
A :
por sí mismo agrega el directorio actual al $PATH
. Usar PATH="/new/dir${PATH:+:$PATH}"
evita esto. Entonces, seguro, puede usarlo PATH="${PATH:+${PATH}:}/usr/local/bin:/usr/bin"
si lo desea, o puede usarlo PATH="$PATH:/usr/local/bin:/usr/bin"
si lo prefiere. La única diferencia es que el primero podría agregar un extra :
, agregando así su directorio actual a su $PATH
.