Bash Linux:shell内置字符串匹配

Bash Linux:shell内置字符串匹配,bash,parsing,shell,wildcard,Bash,Parsing,Shell,Wildcard,我正试图更加熟悉linux中shell中的内置字符串匹配功能。我遇到了这个家伙,他举了个例子 a="abc|def" echo ${a#*|} # will yield "def" echo ${a%|*} # will yield "abc" 我试过了,它做了广告宣传的事情,但我不明白$,{},#,*,|在做什么,我试着在网上或手册中寻找一些参考资料,但我什么也找不到。谁能给我解释一下这里发生了什么事吗?看一看 删除$substring的最短匹配项 从$string的后面 删除$

我正试图更加熟悉linux中shell中的内置字符串匹配功能。我遇到了这个家伙,他举了个例子

a="abc|def"
echo ${a#*|}    # will yield "def"
echo ${a%|*}    # will yield "abc"
我试过了,它做了广告宣传的事情,但我不明白
$,{},#,*,|
在做什么,我试着在网上或手册中寻找一些参考资料,但我什么也找不到。谁能给我解释一下这里发生了什么事吗?

看一看

删除$substring的最短匹配项 从$string的后面

删除$substring的最短匹配项 从$string前面开始

编辑:

我不明白$,{},#,*,是什么意思| 你在做什么

我建议你读一读

删除$substring的最短匹配项 从$string的后面

删除$substring的最短匹配项 从$string前面开始

编辑:

我不明白$,{},#,*,是什么意思| 你在做什么

我建议阅读

说明
#
操作符删除左侧的最短匹配,而
%
操作符删除右侧的最短匹配

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

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

表示
#
操作符删除左侧可能最短的匹配,而
%%
操作符删除右侧可能最短的匹配

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


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

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

mystring="1234567"
echo ${mystring}    # produces '1234567'
%和#符号允许您添加修改默认行为的命令

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

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

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

mystring="1234567"
echo ${mystring}    # produces '1234567'
%和#符号允许您添加修改默认行为的命令

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

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

这些特性和其他类似有用的特性在Bash参考手册的章节中有文档记录。这是另一个非常好的功能。

这些功能和其他类似有用的功能在Bash参考手册的章节中有详细说明。这是另一个非常好的例子