:+
Jest formą ekspansji parametrów :
$ {parametr: + [słowo]} : Użyj wartości alternatywnej.
Jeśli parametr jest nieustawiony lub ma wartość NULL, wartość NULL należy zastąpić; w przeciwnym razie rozwinięcie słowa (lub pusty ciąg znaków, jeśli słowo zostanie pominięte) zostanie zastąpione.
Innymi słowy, jeśli zmienna $var
jest zdefiniowana, echo ${var:+foo}
wydrukuje, foo
a jeśli nie, wydrukuje pusty ciąg.
Drugi :
to nic specjalnego. Jest to znak używany jako separator na liście katalogów w $PATH
. Jest więc PATH="/usr/local/bin:/usr/bin${PATH:+:${PATH}}"
skrótowym sposobem pisania:
if [ -z "$PATH" ]; then
PATH=/usr/local/bin:/usr/bin
else
PATH=/usr/local/bin:/usr/bin:$PATH
fi
To tylko sprytna sztuczka, aby uniknąć dodawania dodatkowych, :
gdy $PATH
nie jest ustawiona. Na przykład:
$ PATH="/usr/bin"
$ PATH="/new/dir:$PATH" ## Add a directory
$ echo "$PATH"
/new/dir:/usr/bin
Ale jeśli PATH
jest rozbrojony:
$ unset PATH
$ PATH="/new/dir:$PATH"
$ echo "$PATH"
/new/dir:
:
Sam dodaje aktualny katalog $PATH
. Używanie PATH="/new/dir${PATH:+:$PATH}"
pozwala tego uniknąć. Więc na pewno możesz użyć, PATH="${PATH:+${PATH}:}/usr/local/bin:/usr/bin"
jeśli chcesz, lub możesz użyć, PATH="$PATH:/usr/local/bin:/usr/bin"
jeśli wolisz. Jedyna różnica polega na tym, że ten pierwszy może dodać dodatkowy :
, a tym samym dodać bieżący katalog do twojego $PATH
.