在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?
答案 0 :(得分:4)
这些是bash
Shell参数扩展的实例;
见http://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
注意:ksh
和zsh
也支持您问题中的扩展(我不清楚功能重叠的完整程度),而sh
(POSIX) -features-only shells),不支持字符串替换扩展${p//[0-9]/}
。
${p//[0-9]/}
删除所有数字:用空字符串替换所有(//
)数字实例([0-9]
) - 即删除全部数字(在最后/
之后出现的是替换字符串,在这种情况下为空)。
${1##[-+]}
剥离单个前导-
或+
(如果存在):从技术上讲,这会移除由单个组成的最长前缀(##
)来自参数-
的 +
或$1
字符。鉴于搜索模式仅匹配单个字符,因此无需在此处使用##
作为最长前缀,并#
- 最短的前缀 - 可以。
${LSB:-}
设计用于防止脚本在使用-u
(nounset
)shell属性运行时崩溃的无操作:从技术上讲,此扩展意味着:在大小写变量{ {1}} 未设置或为空,它将替换为$LSB
后面的字符串,在这种情况下,该字符串也为空。
虽然乍一看这似乎毫无意义,但它有其目的,正如Sigi所指出的那样:
"
如果使用:-
选项调用shell(或使用${LSB:-}
),则-u
构造非常有意义,并且实际上可能未设置变量set -u
。如果您将$LSB
引用为$LSB
,则可以避免shell退出。由于在复杂的脚本中使用set ${LSB:-}
是一种很好的做法,因此这一举措经常派上用场。
"
答案 1 :(得分:0)
${p//[0-9]/} # removes digits from anywhere in `$p`
${1##[-+]} # removes + or - from start in $1
${LSB:-} # not really doing anything