我注意到有时包装脚本将${1:+"$@"}
用于参数而不仅仅是"$@"
.
例如,http://svn.macosforge.org/repository/macports/trunk/dports/editors/vim-app/files/gvim.sh使用
exec "$binary" $opts ${1:+"$@"}
任何人都可以分解${1:+"$@"}
成英语并解释为什么它会优于普通的优势"$@"
吗?
'歇斯底里的葡萄干',又名历史原因.
JesperE(或Bash手册页)的解释对于它的作用是准确的:
如果$ 1存在且不是空字符串,则替换引用的参数列表.
大约20年左右之前,如果没有参数,Bourne Shell的一些破坏的小变体用"$ @"替换空字符串"",而不是替换正确的当前行为.是否有任何此类系统仍在使用中尚待辩论.
[嗯:扩展无法正常工作:
command '' arg2 arg3 ...
在这种情况下,正确的表示法是:
${1+"$@"}
无论$ 1是否为空参数,这都能正常工作.所以,有人记得这个符号不正确,不小心引入了一个bug.]