当前位置:  开发笔记 > 编程语言 > 正文

/ bin/sh中的$ {1:+"$ @"}

如何解决《/bin/sh中的${1:+"$@"}》经验,为你挑选了1个好方法。

我注意到有时包装脚本将${1:+"$@"}用于参数而不仅仅是"$@".

例如,http://svn.macosforge.org/repository/macports/trunk/dports/editors/vim-app/files/gvim.sh使用

exec "$binary" $opts ${1:+"$@"}

任何人都可以分解${1:+"$@"}成英语并解释为什么它会优于普通的优势"$@"吗?



1> Jonathan Lef..:

'歇斯底里的葡萄干',又名历史原因.

JesperE(或Bash手册页)的解释对于它的作用是准确的:

如果$ 1存在且不是空字符串,则替换引用的参数列表.

大约20年左右之前,如果没有参数,Bourne Shell的一些破坏的小变体用"$ @"替换空字符串"",而不是替换正确的当前行为.是否有任何此类系统仍在使用中尚待辩论.

[嗯:扩展无法正常工作:

command '' arg2 arg3 ...

在这种情况下,正确的表示法是:

${1+"$@"}

无论$ 1是否为空参数,这都能正常工作.所以,有人记得这个符号不正确,不小心引入了一个bug.]


啊哈.是的,至少根据http://google.com/codesearch,您提到的符号更为常见.我看到$ {1 +"$ @"}(即没有冒号)的结果为191,000,而$ {1:+"$ @"}的结果为173.当然,"man bash"的引用有一个冒号.所以也许使用冒号不是一个bug...
冒号是一个不同的测试 - 它正在寻找一个非空字符串.它最常用于必须具有值的env var:$ {ENVVAR:+" - value = $ ENVVAR"}或者其他什么.仅当ENVVAR设置为非空字符串时,才会创建-value = whatever参数.
推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有