见过这个参数替换,但对它到底做了什么感到困惑。
${num//[0-9]/}
答案1
它从字符串中删除 (*) 所有数字 (0-9),无论它们出现在字符串中的何处。例如
$ num=abc5x7y999z
$ echo ${num//[0-9]/}
abcxyz
(*) 实际上,它将它们替换为空字符串 - 或者/
该参数扩展中的最后一个之后的任何字符串。从man bash
:
${parameter/pattern/string}
模式替换。该模式被扩展以产生一个模式,就像在路径名扩展中一样,参数被扩展并且模式与其值的最长匹配被替换为字符串。使用下面的模式匹配中描述的规则来执行匹配。
如果模式以 开头
/
,则模式的所有匹配项都将替换为字符串。 通常只替换第一个匹配项。如果模式以 开头
#
,则它必须在参数扩展值的开头匹配。如果模式以 开头%
,则它必须匹配参数扩展值的末尾。如果字符串为空,则删除模式的匹配项,并且
/
可以省略后面的模式。如果启用了 nocasematch shell 选项,则执行匹配时将不考虑字母字符的大小写。如果参数是
@
or*
,则替换操作依次应用于每个位置参数,并且扩展是结果列表。
@
如果parameter是下标为or的数组变量*
,则依次对数组的每个成员进行替换操作,并且扩展是结果列表。
(粗体和额外的换行符是我添加的)