首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用extglob删除参数前缀或后缀时出错

在使用extglob删除参数前缀或后缀时出错
EN

Stack Overflow用户
提问于 2014-08-07 16:32:44
回答 2查看 86关注 0票数 0

实际上,我试图在bash脚本中直接从超级字符串的中间提取regex子字符串,而不需要对grep (或其他什么)进行分叉/执行。为此,我想使用shell参数展开从超级字符串中删除不想要的前缀和不想要的后缀。但是前缀和后缀也接近正则表达式,所以我试图启用extglob并执行类似的操作(在Cygwin下面):

代码语言:javascript
复制
$ echo $BASH_VERSION
4.1.10(4)-release
$ shopt -s extglob
$ foo=foobar
$ echo $foo
foobar
$ echo ${foo#fo}   #simple prefix removal works as expected
obar
$ echo ${foo/!(FO)/SUB}   #substitution using extglob works
SUB
$ echo ${foo#!(FO)}
foobar
$ echo ${foo##!(FO)}
<nothing>
$ echo ${foo%ar}   #simple suffix removal works as expected
foob
$ echo ${foo%!(AR)}
foobar
$ echo ${foo%%!(AR)}
<nothing>

谁能解释一下在填词时前缀和后缀移除的结果吗?使用语法了吗?是巴什虫吗?(如果我能搞清楚这一点,我就会尝试比"FO“和”AR“更复杂的模式。)

EN

回答 2

Stack Overflow用户

发布于 2014-08-07 16:50:14

${foo%!(AR)}的意思是“删除非AR的最短后缀”。最短的这样的后缀是空字符串。

${foo%%!(AR)}的意思是“删除最长的后缀而不是AR”。如果是"foobar",它会移除所有的东西。要获得更有趣的结果,请尝试:

代码语言:javascript
复制
$ echo ${foo%%!(foobar)}
f
$ echo ${foo%%!(*bar)}
foob
票数 1
EN

Stack Overflow用户

发布于 2014-08-07 16:49:58

%%删除最长的匹配后缀。由于foobar是与"not“匹配的最长前缀,整个字符串将被删除。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25187713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档