Đây :+
là một hình thức mở rộng tham số :
$ {tham số: + [word]} : Sử dụng giá trị thay thế.
Nếu tham số không được đặt hoặc null, null sẽ được thay thế; mặt khác, việc mở rộng từ (hoặc một chuỗi trống nếu từ bị bỏ qua) sẽ được thay thế.
Nói cách khác, nếu biến $var
được định nghĩa, echo ${var:+foo}
sẽ in foo
và nếu không, nó sẽ in chuỗi rỗng.
Thứ hai :
là không có gì đặc biệt. Nó là ký tự được sử dụng như một dấu phân cách trong danh sách các thư mục trong $PATH
. Vì vậy, PATH="/usr/local/bin:/usr/bin${PATH:+:${PATH}}"
là một cách viết tốc ký:
if [ -z "$PATH" ]; then
PATH=/usr/local/bin:/usr/bin
else
PATH=/usr/local/bin:/usr/bin:$PATH
fi
Đó chỉ là một mẹo thông minh để tránh thêm phần bổ sung :
khi $PATH
không được đặt. Ví dụ:
$ PATH="/usr/bin"
$ PATH="/new/dir:$PATH" ## Add a directory
$ echo "$PATH"
/new/dir:/usr/bin
Nhưng nếu PATH
không được đặt:
$ unset PATH
$ PATH="/new/dir:$PATH"
$ echo "$PATH"
/new/dir:
A :
tự thêm thư mục hiện tại vào $PATH
. Sử dụng PATH="/new/dir${PATH:+:$PATH}"
để tránh điều này. Vì vậy, chắc chắn, bạn có thể sử dụng PATH="${PATH:+${PATH}:}/usr/local/bin:/usr/bin"
nếu bạn muốn, hoặc bạn có thể sử dụng PATH="$PATH:/usr/local/bin:/usr/bin"
nếu bạn thích. Sự khác biệt duy nhất là cái trước có thể thêm một phần bổ sung :
, do đó thêm thư mục hiện tại của bạn vào $PATH
.