从 URL 中提取不同种类的协议

Extract different kinds of protocol from URL

我有以下具有不同协议类型的 URL:

URL=https://example.com
URL=ftp://example.com
URL=ssh://example.com
URL=///filestore/storage

我正在使用 echo ${URL%://*} 获取协议,但对于 /// 它不起作用,无法应用多个正则表达式,请帮助

您可以使用这个扩展的 glob 匹配:

"${url%?(:)//*}"

其中 ?(:) 使用 扩展通配 后跟 // 匹配可选的 : 并且后跟任意数量的字符shell.

中的全局匹配

代码:

for url in 'https://example.com' 'ftp://example.com' 'ssh://example.com' '///filestore/storage'; do
   echo "${url%?(:)//*}"
done

https
ftp
ssh
/

PS:在 BASH 版本 < 4 上,在此代码之前使用 shopt -s extglob