Bash/ksh 子字符串删除

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

根据文档:

${string#substring}   # strip shortest match
${string##substring}  # strip longest match

但是,在测试时我得到:

$ string="abcABC123ABCabc"
$ echo ${string#a*C}
123ABCabc
$ echo ${string##a*C}
abc

到目前为止,效果符合预期,但是...

$ echo ${string#B*c}
abcABC123ABCabc
$ echo ${string##B*c}
abcABC123ABCabc

我希望第三个

echo
已经返回
abcABC123A
(去掉最短的匹配),第四个将返回
abcA

哪里出了问题?

bash shell ksh
1个回答
0
投票

${var#prefix}
${var##prefix}
锚定到字符串的开头。

${var%suffix}
${var%%suffix}
锚定到字符串的末尾。

如果您想要非锚定的替换,那么您应该使用

${var/pattern/subst}
(可以将
subst
留空,如
${string/a*C/}
${var//pattern/subst}
(其工作方式相同,但替换 all 实例)
pattern
,不仅仅是第一个)。

© www.soinside.com 2019 - 2024. All rights reserved.