如何在bash中从URL提取子字符串

如何在bash中从URL提取子字符串,bash,Bash,我有以下字符串 git@bitbucket.org:user/my-repo-name.git 我想提取这部分 my-repo-name 对于bash: s='git@bitbucket.org:user/my-repo-name.git' [[ $s =~ ^.*/(.*)\.git$ ]] echo ${BASH_REMATCH[1]} 输出: my-repo-name my-repo-name 我的回购协议名称 对于bash: s='git@bitbucket.org:user/m

我有以下字符串

git@bitbucket.org:user/my-repo-name.git
我想提取这部分

my-repo-name
对于bash:

s='git@bitbucket.org:user/my-repo-name.git'
[[ $s =~ ^.*/(.*)\.git$ ]]
echo ${BASH_REMATCH[1]}
输出:

my-repo-name
my-repo-name
我的回购协议名称 对于bash:

s='git@bitbucket.org:user/my-repo-name.git'
[[ $s =~ ^.*/(.*)\.git$ ]]
echo ${BASH_REMATCH[1]}
输出:

my-repo-name
my-repo-name
我的回购协议名称
使用bash的另一种方法:

输出:

my-repo-name
my-repo-name

我不确定是否有办法将
#
%
运算符组合成一个替换。

另一种方法,使用bash的:

输出:

my-repo-name
my-repo-name

我不确定是否有办法将
#
%
运算符组合到一个替换中。

不幸的是,参数扩展不能嵌套在
bash
中。(
zsh
将允许嵌套
${{s}*/}%.git}
,以及更简单的
$s:t:r
)不幸的是,参数扩展不能嵌套在
bash
中。(
zsh
将允许嵌套
${${s#*/}%.git}
,以及更简单的
$s:t:r