分类:
2009-08-17 14:38:29
网上看到老外回答的变量设置方式的区别,挺好,收藏,感谢作者!
> is unset. (Actually, some scripts use "${LD_LIBRARY_PATH+:
> $LD_LIBRARY_PATH}", which seems to work, too. But this is not
> documented in the bash man page, at least I can't find it.)
The difference between ${PARAMETER:+WORD} and ${PARAMETER+WORD} is
subtle, and you're right, it's not documented in the bash man page.
It is part of the POSIX shell standard, though. ${PARAMETER:+WORD}
substitutes WORD if PARAMETER is set and non-empty. ${PARAMETER+WORD}
substitutes WORD if PARAMETER is set, empty or not. For example:
vineet@sprocket:~$ FOO=
vineet@sprocket:~$ echo ${FOO+BAR}
BAR
vineet@sprocket:~$ echo ${FOO:+BAR}
vineet@sprocket:~$ unset FOO
vineet@sprocket:~$ echo ${FOO+BAR}
vineet@sprocket:~$ echo ${FOO:+BAR}
vineet@sprocket:~$
In many cases they'll be equivalent, but in the LD_LIBRARY_PATH case,
I'd recommend using the colon-form. If someone has set an empty
LD_LIBRARY_PATH, the correct behavior is just to add the directory you
want; you don't want to stick an extra empty pathname component in
there.
good times,
Vineet