- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在 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 Parameter Expansion 的实例;见http://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
注意:ksh
和 zsh
也支持您问题中的扩展(我不清楚功能重叠的全部范围),而 sh
(POSIX-features-only shell),不支持字符串替换扩展,${p//[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 - 我不明白这个参数扩展 : ${p//[0-9]/},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23319441/
我是一名优秀的程序员,十分优秀!