我正在尝试更熟悉linux中shell中内置的字符串匹配功能。我遇到了一个叫posting的家伙,他给我举了个例子
a="abc|def"
echo ${a#*|} # will yield "def"
echo ${a%|*} # will yield "abc"
我试过了,它做了广告宣传的事情,但我不明白$,{},#,*,|
在做什么,我试着在网上或手册中寻找一些参考资料,但我找不到任何东西。有人能给我解释一下这是怎么回事吗?
发布于 2010-05-01 00:45:38
This article in the Linux Journal表示,#
运算符删除左侧的最短匹配,而%
运算符删除右侧的最短匹配。
所以${a#*|}
返回|
之后的所有内容,${a%|*}
返回|
之前的所有内容。
如果您遇到需要贪婪匹配的情况,则可以使用##
或%%
。
发布于 2010-05-01 00:45:34
看看this吧。
${string%substring}
从$string的背面删除$substring的最短匹配。
${string#substring}
从$string前面删除$substring的最短匹配。
编辑:
我不明白$,{},#,*,|在做什么
我推荐阅读this
发布于 2010-05-01 03:31:53
通常,${somename}将替换已定义参数的内容:
mystring="1234567"
echo ${mystring} # produces '1234567'
%和#符号允许您添加修改默认行为的命令。
星号'*‘是一个通配符;而竖线'|’只是一个匹配字符。让我使用匹配的字符'4‘来做同样的事情。
mystring="1234567"
echo ${mystring#*4} # produces '567'
https://stackoverflow.com/questions/2746145
复制相似问题