根据文档:
${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
哪里出了问题?
${var#prefix}
和 ${var##prefix}
锚定到字符串的开头。
${var%suffix}
和 ${var%%suffix}
锚定到字符串的末尾。
如果您想要非锚定的替换,那么您应该使用
${var/pattern/subst}
(可以将 subst
留空,如 ${string/a*C/}
或 ${var//pattern/subst}
(其工作方式相同,但替换 all 实例) pattern
,不仅仅是第一个)。