String Shell字符串操作,通配符作用域

String Shell字符串操作,通配符作用域,string,shell,replace,String,Shell,Replace,我试图通过删除由一些分隔符分隔的子字符串来操作shell中的字符串。目前,通配符中存在一些不希望出现的行为,如下所示: string='start.badstuff.goodstuff.end' echo ${string/bad*.} #start.end 在上面的示例中,假设我知道我要删除的子字符串以'bad'开头,然后是随机'stuff.我希望删除的所有子字符串。我想保留字符串'goodstuff',但是,在本例中,通配符的作用域最宽而不是最窄(使用*='stuff.goodstu

我试图通过删除由一些分隔符分隔的子字符串来操作shell中的字符串。目前,通配符中存在一些不希望出现的行为,如下所示:

string='start.badstuff.goodstuff.end'
echo ${string/bad*.}    #start.end
在上面的示例中,假设我知道我要删除的子字符串以
'bad'
开头,然后是随机
'stuff.
我希望删除的所有子字符串。我想保留字符串
'goodstuff'
,但是,在本例中,通配符的作用域最宽而不是最窄(使用
*='stuff.goodstuff'
而不是所需的行为
*='stuff'

有没有办法限制通配符的作用域在
'badstuff'
之后的第一个
.
处停止,而不知道
'goodstuff'
可能是什么?

启用了ext.glob(有关详细信息,请参见此页)

shopt-s extglob

你可以

echo ${string/bad*([^.]).}
导致

start.goodstuff.end