Das :+
ist eine Form der Parametererweiterung :
$ {parameter: + [word]} : Verwenden Sie einen alternativen Wert.
Wenn der Parameter nicht gesetzt oder null ist, wird null ersetzt. Andernfalls wird die Erweiterung des Wortes (oder eine leere Zeichenfolge, wenn das Wort weggelassen wird) ersetzt.
Mit anderen Worten, wenn die Variable $var
definiert ist, echo ${var:+foo}
wird gedruckt, foo
und wenn dies nicht der Fall ist, wird die leere Zeichenfolge gedruckt.
Der zweite :
ist nichts Besonderes. Dies ist das Zeichen, das in der Liste der Verzeichnisse in als Trennzeichen verwendet wird $PATH
. Also, PATH="/usr/local/bin:/usr/bin${PATH:+:${PATH}}"
ist eine Kurzform des Schreibens:
if [ -z "$PATH" ]; then
PATH=/usr/local/bin:/usr/bin
else
PATH=/usr/local/bin:/usr/bin:$PATH
fi
Es ist nur ein cleverer Trick, um zu vermeiden, dass ein zusätzliches Element hinzugefügt wird, :
wenn $PATH
es nicht festgelegt ist. Beispielsweise:
$ PATH="/usr/bin"
$ PATH="/new/dir:$PATH" ## Add a directory
$ echo "$PATH"
/new/dir:/usr/bin
Aber wenn nicht gesetzt PATH
ist:
$ unset PATH
$ PATH="/new/dir:$PATH"
$ echo "$PATH"
/new/dir:
A :
selbst fügt das aktuelle Verzeichnis dem hinzu $PATH
. Mit wird dies PATH="/new/dir${PATH:+:$PATH}"
vermieden. So sicher, können Sie verwenden, PATH="${PATH:+${PATH}:}/usr/local/bin:/usr/bin"
wenn Sie möchten, oder Sie können verwenden, PATH="$PATH:/usr/local/bin:/usr/bin"
wenn Sie es vorziehen. Der einzige Unterschied besteht darin, dass der erstere möglicherweise ein zusätzliches :
Verzeichnis hinzufügt und dadurch Ihr aktuelles Verzeichnis zu Ihrem hinzufügt $PATH
.