:+
Є формою розширення параметра :
$ {параметр: + [слово]} : Використовуйте альтернативне значення.
Якщо параметр не встановлений або недійсний, нуль заміняється; в іншому випадку розширення слова (або порожній рядок, якщо слово пропущено) заміняється.
Іншими словами, якщо змінна $var
визначена, echo ${var:+foo}
вона надрукує, foo
а якщо її немає, вона надрукує порожній рядок.
Друге :
- нічого особливого. Це символ, який використовується як роздільник у списку каталогів у $PATH
. Отже, PATH="/usr/local/bin:/usr/bin${PATH:+:${PATH}}"
це стислий спосіб написання:
if [ -z "$PATH" ]; then
PATH=/usr/local/bin:/usr/bin
else
PATH=/usr/local/bin:/usr/bin:$PATH
fi
Це просто розумний трюк, щоб уникнути додавання додаткового, :
коли $PATH
його не встановлено. Наприклад:
$ PATH="/usr/bin"
$ PATH="/new/dir:$PATH" ## Add a directory
$ echo "$PATH"
/new/dir:/usr/bin
Але якщо PATH
це не встановлено:
$ unset PATH
$ PATH="/new/dir:$PATH"
$ echo "$PATH"
/new/dir:
A :
сам додає поточний каталог до $PATH
. Використання PATH="/new/dir${PATH:+:$PATH}"
уникає цього. Отже, ви можете використовувати, PATH="${PATH:+${PATH}:}/usr/local/bin:/usr/bin"
якщо хочете, або ви можете використовувати, PATH="$PATH:/usr/local/bin:/usr/bin"
якщо хочете. Єдина відмінність полягає в тому, що перший може додати додатковий :
, тим самим додавши поточний каталог у свій $PATH
.