首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Linux: shell内置字符串匹配

Linux: shell内置字符串匹配
EN

Stack Overflow用户
提问于 2010-05-01 00:39:22
回答 4查看 602关注 0票数 1

我正在尝试更熟悉linux中shell中内置的字符串匹配功能。我遇到了一个叫posting的家伙,他给我举了个例子

代码语言:javascript
运行
复制
a="abc|def"
echo ${a#*|}    # will yield "def"
echo ${a%|*}    # will yield "abc"

我试过了,它做了广告宣传的事情,但我不明白$,{},#,*,|在做什么,我试着在网上或手册中寻找一些参考资料,但我找不到任何东西。有人能给我解释一下这是怎么回事吗?

EN

回答 4

Stack Overflow用户

发布于 2010-05-01 00:45:38

This article in the Linux Journal表示,#运算符删除左侧的最短匹配,而%运算符删除右侧的最短匹配。

所以${a#*|}返回|之后的所有内容,${a%|*}返回|之前的所有内容。

如果您遇到需要贪婪匹配的情况,则可以使用##%%

票数 3
EN

Stack Overflow用户

发布于 2010-05-01 00:45:34

看看this吧。

代码语言:javascript
运行
复制
${string%substring}

从$string的背面删除$substring的最短匹配。

代码语言:javascript
运行
复制
${string#substring}

从$string前面删除$substring的最短匹配。

编辑:

我不明白$,{},#,*,|在做什么

我推荐阅读this

票数 1
EN

Stack Overflow用户

发布于 2010-05-01 03:31:53

通常,${somename}将替换已定义参数的内容:

代码语言:javascript
运行
复制
mystring="1234567"
echo ${mystring}    # produces '1234567'

%和#符号允许您添加修改默认行为的命令。

星号'*‘是一个通配符;而竖线'|’只是一个匹配字符。让我使用匹配的字符'4‘来做同样的事情。

代码语言:javascript
运行
复制
mystring="1234567"
echo ${mystring#*4}  # produces '567'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2746145

复制
相关文章

相似问题

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