参数替换为 ${num//[0-9]/}

参数替换为 ${num//[0-9]/}

见过这个参数替换,但对它到底做了什么感到困惑。

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

答案1

它从字符串中删除 (*) 所有数字 (0-9),无论它们出现在字符串中的何处。例如

$ num=abc5x7y999z
$ echo ${num//[0-9]/}
abcxyz

(*) 实际上,它将它们替换为空字符串 - 或者/该参数扩展中的最后一个之后的任何字符串。从man bash

${parameter/pattern/string}

模式替换。该模式被扩展以产生一个模式,就像在路径名扩展中一样,参数被扩展并且模式与其值的最长匹配被替换为字符串。使用下面的模式匹配中描述的规则来执行匹配。

如果模式以 开头/,则模式的所有匹配项都将替换为字符串。 通常只替换第一个匹配项。

如果模式以 开头#,则它必须在参数扩展值的开头匹配。如果模式以 开头%,则它必须匹配参数扩展值的末尾。

如果字符串为空,则删除模式的匹配项,并且/可以省略后面的模式。

如果启用了 nocasematch shell 选项,则执行匹配时将不考虑字母字符的大小写。如果参数是@or *,则替换操作依次应用于每个位置参数,并且扩展是结果列表。

@如果parameter是下标为or的数组变量*,则依次对数组的每个成员进行替换操作,并且扩展是结果列表。

(粗体和额外的换行符是我添加的)

相关内容