=~
您可以在条件内使用匹配运算符[[ ... ]]
:
#!/bin/bash
url=https://github.com/PatrickConway/repo-name.git
if [[ $url =~ ([^/]*)\.git ]] ; then
echo "${BASH_REMATCH[1]}"
fi
Run Code Online (Sandbox Code Playgroud)
括号中的每个部分都会创建一个捕获组,可以在 BASH_REMATCH 数组中的相同位置找到相应的匹配子字符串。
[...]
定义一个字符类[/]
匹配由单个字符、斜杠组成的字符类^
否定字符类,[^/]
匹配除斜杠之外的任何内容*
意思是“零次或多次”\.
匹配一个点,就像.
没有反斜杠匹配任何字符一样所以,它是:记住一个非斜杠的子字符串,后跟一个点和“git”。
或者也许是一个简单的参数扩展:
#!/bin/bash
url=https://github.com/PatrickConway/repo-name.git
url_without_extension=${url%.git}
name=${url_without_extension##*/}
echo $name
Run Code Online (Sandbox Code Playgroud)
%
从右边删除,#
从左边删除,加倍符号使匹配变得贪婪,即通配符尝试尽可能多地匹配。
归档时间: |
|
查看次数: |
5873 次 |
最近记录: |