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是一种很好的做法,因此这一举措很常见.
“
标签:shell,linux,parameters,expansion 来源: https://codeday.me/bug/20190624/1279038.html