我有以下具有不同类型协议(protocol)的 URL:
URL=https://example.com
URL=ftp://example.com
URL=ssh://example.com
URL=///filestore/storage
我正在使用 echo ${URL%://*}
来获取协议(protocol),但对于 ///
它不起作用,无法应用多个正则表达式,请帮忙
最佳答案
您可以使用此扩展全局匹配:
"${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
。
关于bash - 从 URL 中提取不同类型的协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71032427/