La :+
è una forma di espansione di parametro :
$ {parametro: + [parola]} : usa valore alternativo.
Se il parametro non è impostato o è nullo, è necessario sostituire null; in caso contrario, verrà sostituita l'espansione della parola (o una stringa vuota se la parola viene omessa).
In altre parole, se la variabile $var
è definita, echo ${var:+foo}
stamperà foo
e, in caso contrario, stamperà la stringa vuota.
Il secondo :
non è niente di speciale. È il personaggio usato come separatore nell'elenco delle directory in $PATH
. Quindi, PATH="/usr/local/bin:/usr/bin${PATH:+:${PATH}}"
è un modo abbreviato di scrivere:
if [ -z "$PATH" ]; then
PATH=/usr/local/bin:/usr/bin
else
PATH=/usr/local/bin:/usr/bin:$PATH
fi
È solo un trucco intelligente per evitare di aggiungere un extra :
quando $PATH
non è impostato. Per esempio:
$ PATH="/usr/bin"
$ PATH="/new/dir:$PATH" ## Add a directory
$ echo "$PATH"
/new/dir:/usr/bin
Ma se PATH
non è impostato:
$ unset PATH
$ PATH="/new/dir:$PATH"
$ echo "$PATH"
/new/dir:
A :
da solo aggiunge la directory corrente a $PATH
. L'uso PATH="/new/dir${PATH:+:$PATH}"
evita questo. Quindi certo, puoi usare PATH="${PATH:+${PATH}:}/usr/local/bin:/usr/bin"
se vuoi, oppure puoi usare PATH="$PATH:/usr/local/bin:/usr/bin"
se preferisci. L'unica differenza è che il primo potrebbe aggiungere un extra :
, aggiungendo così la directory corrente alla tua $PATH
.