bash - 从 URL 中提取不同类型的协议(protocol)

标签 bash glob

我有以下具有不同类型协议(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/

相关文章:

linux - Cywgin 没有正确运行脚本

mysql - Bash - 替换或删除字符串 bash 中的第一次出现

linux - 移动 30 分钟前的文件

javascript - 如何使用 bash 运行 JSLint?

linux - 如何删除 root 拥有的名称中包含空格的文件?

php - 使用 Glob() 时如何删除文件路径?

perl - Perl 中的跨平台 globbing

typescript - 无论我尝试什么,npm 都不会忽略我的 TypeScript 源代码文件

Python - 没有绝对路径的 Glob

node.js - 在 Gulp 中使用 `base` 访问主目录