linux – 我不明白这个参数扩展:${p // [0-9] /}

Linux /etc/init.d/functions脚本中,我发现了以下参数扩展,我不太明白:

${p//[0-9]/}  replace all instances of any number to/by what?

${1##[-+]}  This seems to remove all the longest left instances of minuses and pluses?

${LSB:-}  This seems to say that if LSB is not set then set nothing? in other words do nothing?

解决方法:

这些是bash Shell参数扩展的实例;
http://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html

注意:ksh和zsh也支持你问题中的扩展(我不清楚功能重叠的全部范围),而sh(POSIX-features-only shell)不支持字符串替换扩展,${对// [0-9] /}.

${p//[0-9]/}

删除所有数字:用空字符串替换所有(//)数字实例([0-9]) – 即删除所有数字(在最后一个/之后是替换字符串,在这种情况下为空) .

${1##[-+]}

剥离单个前导 – 或者,如果存在:从技术上讲,这将删除由参数$1中的单个或字符组成的最长前缀(##).鉴于搜索模式只匹配单个字符,因此不需要在这里使用##作为最长的前缀,而对于最短的前缀,##也可以.

${LSB:-} 

设计用于防止脚本在使用-u(nounset)shell属性运行时破坏的无操作:从技术上讲,此扩展意味着:如果变量$LSB未设置或为空,则将替换为以下字符串: – ,在这种情况下,也是空的.

虽然这看起来乍一看似乎毫无意义,但它有其目的,正如Sigi指出:


如果使用-u选项调用shell(或使用set -u),则${LSB: – }构造非常有意义,并且实际上可能未设置变量$LSB.如果您将$LSB引用为${LSB: – },则可以避免shell退出.由于在复杂脚本中使用set -u是一种很好的做法,因此这一举措很常见.

上一篇:Linux系统信息/IO读写/下载速度一键测试脚本bench.sh


下一篇:android – Google Play APK Expansion Downloader Library坏了吗?