2

我的问题是,我尝试在变量的开头剥离一个字符串。我已经完成shopt -s exglob了扩展模式匹配。

    a="HelloDolly"
    echo "${a#[A-Z]+([a-z])}"

我认为这+([a-z])意味着尽可能多的小写字母。那[A-Z]+([a-z])应该匹配Hello

应该返回多莉,但我lloDolly回来了。如果/试一试#_

    echo "${a/[A-Z]+([a-z])}"

我什么也得不到。看起来参数扩展不区分大小写。

感谢所有能给我提示的人。

4

1 回答 1

1

使用单个 #,您可以获得最短的匹配。“他”是一个大写字母和一个或多个小写字母的最短匹配。切换到双#以获得最长的匹配“你好”

echo "${a##[A-Z]+([a-z])}"

为了避免基于语言环境的字符范围解释问题,请改用字符类:

echo "${a##[[:upper:]]+([[:lower:]])}"
于 2012-08-18T18:49:48.580 回答