Ini :+adalah bentuk ekspansi parameter :
$ {parameter: + [word]} : Gunakan Nilai Alternatif.
Jika parameter tidak disetel atau nol, null harus diganti; jika tidak, perluasan kata (atau string kosong jika kata dihilangkan) harus diganti.
Dengan kata lain, jika variabel $vardidefinisikan, echo ${var:+foo}akan dicetak foodan, jika tidak, itu akan mencetak string kosong.
Yang kedua :tidak ada yang istimewa. Ini adalah karakter yang digunakan sebagai pemisah dalam daftar direktori di $PATH. Jadi, PATH="/usr/local/bin:/usr/bin${PATH:+:${PATH}}"adalah cara menulis yang singkat:
if [ -z "$PATH" ]; then
PATH=/usr/local/bin:/usr/bin
else
PATH=/usr/local/bin:/usr/bin:$PATH
fi
Ini hanya trik pintar untuk menghindari penambahan ekstra :saat $PATHtidak disetel. Sebagai contoh:
$ PATH="/usr/bin"
$ PATH="/new/dir:$PATH" ## Add a directory
$ echo "$PATH"
/new/dir:/usr/bin
Tetapi jika PATHtidak disetel:
$ unset PATH
$ PATH="/new/dir:$PATH"
$ echo "$PATH"
/new/dir:
A :dengan sendirinya menambahkan direktori saat ini ke $PATH. Menggunakan PATH="/new/dir${PATH:+:$PATH}"menghindari ini. Jadi yakin, Anda dapat menggunakan PATH="${PATH:+${PATH}:}/usr/local/bin:/usr/bin"jika Anda mau, atau Anda dapat menggunakan PATH="$PATH:/usr/local/bin:/usr/bin"jika Anda mau. Satu-satunya perbedaan adalah bahwa yang pertama dapat menambahkan ekstra :, sehingga menambahkan direktori Anda saat ini ke $PATH.