我正在尝试更熟悉使用linux中shell中可用的内置字符串匹配内容。我遇到了这些家伙posting,他展示了一个例子
a="abc|def"
echo ${a#*|} # will yield "def"
echo ${a%|*} # will yield "abc"
我试了一下,它做了它做广告的事情,但是我不明白$,{},#,*,|
正在做什么,我试着在网上或手册中寻找一些参考但我找不到任何东西。谁能向我解释这里发生了什么?
答案 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。