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 $var
didefinisikan, echo ${var:+foo}
akan dicetak foo
dan, 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 $PATH
tidak disetel. Sebagai contoh:
$ PATH="/usr/bin"
$ PATH="/new/dir:$PATH" ## Add a directory
$ echo "$PATH"
/new/dir:/usr/bin
Tetapi jika PATH
tidak 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
.