Linux:shell内置字符串匹配

时间:2010-04-30 16:39:22

标签: bash parsing shell wildcard

我正在尝试更熟悉使用linux中shell中可用的内置字符串匹配内容。我遇到了这些家伙posting,他展示了一个例子

a="abc|def"
echo ${a#*|}    # will yield "def"
echo ${a%|*}    # will yield "abc"

我试了一下,它做了它做广告的事情,但是我不明白$,{},#,*,|正在做什么,我试着在网上或手册中寻找一些参考但我找不到任何东西。谁能向我解释这里发生了什么?

4 个答案:

答案 0 :(得分:3)

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

因此${a#*|}会在 |后返回所有内容,而${a%|*}会在<{em> |之前返回所有内容。< / p>

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

答案 1 :(得分:1)

看看this

${string%substring}
  

删除$ substring的最短匹配   从$ string的后面开始。

${string#substring}
  

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

编辑:

  

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

我建议阅读this

答案 2 :(得分:1)

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

mystring="1234567"
echo ${mystring}    # produces '1234567'

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

星号'*'是通配符;管道'|'只是一个匹配的角色。让我使用'4'的匹配字符做同样的事情。

mystring="1234567"
echo ${mystring#*4}  # produces '567'

答案 3 :(得分:1)

这些功能和其他类似的功能都记录在Bash参考手册的Shell Parameter Expansion部分中。这是另一个非常好的reference