我在 Shell 中使用正则表达式替换字符串哪里不对了 ?

2019-04-26 18:25:31 +08:00
 HarryQu

目标

我想要替换掉所有的命令选项


期望结果

#!/usr/bin/env bash
test="rm -rf  -b hello"
echo ${test//-[a-z]*/}

期望输出

rm  hello

实际结果

#!/usr/bin/env bash
test="rm -rf  -b hello"
echo ${test//-[a-z]*/}

输出

rm

问题

为什么我的量词 * 没有起作用 ? 感觉这里起了通配符的作用。

2383 次点击
所在节点    问与答
4 条回复
hljjhb
2019-04-26 18:52:28 +08:00
Shell Parameter Expansion 这里不是正则

echo ${test//-*([a-z])}
taolu
2019-04-26 18:55:05 +08:00
加个空格定界
echo ${test//-[a-z]*\ /}
msg7086
2019-04-26 23:14:54 +08:00
// 是文本替换又不是正则替换……
james122333
2019-05-03 16:14:11 +08:00
shopt -s extglob
test="rm -rf -b hello"
echo ${test//-+([a-z])/}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/559042

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX