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