的:+
是一种形式的参数扩展:
$ {parameter:+ [word]}:使用替代值。
如果参数未设置或为null,则应替换为null。否则,将替换单词的扩展名(如果省略单词,则为空字符串)。
换句话说,如果$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
。