参数扩展可以处理多次出现的规范

问题描述 投票:1回答:1

[在构建服务器上使用后锚name%pattern运算符,并输入了类似以下的输入字符串:

remainstr1-remaingstr2--9.99.9-remainstr3-20190920.115934-4.zip

[我需要20190920.115934-4.zip要除去的零件。

我设法使用通配符字符和文字成功地应用了此转换。但是我无法通过使用+量词指定给定范围的多次出现来使其工作。 (除去部分中的数字当然可以是任何数字)

到目前为止,以下模式有效((当然,用.*替换\.zip部分也可以)

REMAIN_STRING=${START_STRING%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].[0-9][0-9][0-9][0-9][0-9][0-9]-[0-9].*}

但是这看起来绝对不够优雅,我想指定数字字符类([0-9])的多次出现,但是我可以使它起作用。

我显然尝试过

REMAIN_STRING=${START_STRING%[0-9]+.[0-9]+-[0-9].*} 

[还有带或不带括号的多种可能,反斜杠转义,但REMAIN_STRING只是与START_STRING保持相同。

我还尝试将模式存储为变量,如一些示例所示:X="[([0-9]+)-([0-9]+).zip]",然后:REMAIN_STRING=${START_STRING%$X}

但是全部失败!

现在让我感到沮丧,甚至更多,因为我没有收到任何错误消息。只是什么都没有发生。

所以,我问自己:name%pattern和类似的运算符可以处理复杂/扩展的正则表达式,还是在某个地方缺少简单的转义符?

bash shell parameters pattern-matching expansion
1个回答
0
投票

我尝试了本杰明建议的extglob,并测试了几种选择,但未成功。

[Benjamin W.建议设置extglob为好,只是给定的模式不完整;这个作品:

shopt -s extglob
REMAIN_STRING=${START_STRING%-+([0-9]).+([0-9])-[0-9].*}-
© www.soinside.com 2019 - 2024. All rights reserved.