Linux Shell 中可用内置参数扩展提取 URL 路径:先 ${url#\*/} 去协议域名,再 ${path%%?*} 去查询参数,合并为 path=${url#\*/}; path=${path%%?*}; echo "/$path" 得 /api/v2/users。

在 Linux Shell 中,从字符串变量里提取特定 URL 路径,核心是“定位分隔符 + 截取边界”。不需要调用外部命令(如 sed 或 awk)就能完成,Shell 内置的参数扩展已足够高效、安全且轻量。
用 ${var#pattern} 和 ${var%%pattern} 提取路径主体
假设变量中存有完整 URL:
url="https://example.com/api/v2/users?id=123&sort=name"要提取 /api/v2/users 这段路径(即协议+域名之后、查询参数之前的部分),可分两步:
- 先去掉协议和域名:
${url#*/}→ 得到example.com/api/v2/users?id=123&sort=name - 再从结果中截掉查询参数(含
?及其右边):${result%%\?*}
合并写法(推荐):
path=${url#*/}; path=${path%%\?*}; echo "/$path"输出:/api/v2/users。注意开头补 / 是因为 ${url#*/} 会吃掉第一个 /。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
直接提取域名后的首个路径段(如 /api)
若只需第一级路径(常见于路由判断),可用双重 # 去除最左匹配:
但这样得到的是文件名(如 users)。要获取 /api,更稳妥的方式是:
例如对 https://a.b/c/d/e,最终得 /c。
用正则匹配提取带条件的路径(需 Bash 4.0+)
当 URL 格式不固定,或需校验路径结构时,可用 [[ ]] 内置正则:
path="${BASH_REMATCH[1]}";
echo "$path";
fi
说明:(/[^?]+) 捕获第一个以 / 开头、不含 ? 的路径部分;${BASH_REMATCH[1]} 即该捕获组内容。
避免常见陷阱
-
http:后缺双斜杠(如http:abc)会导致${url#*/}失效——建议先用${url%%\?*}清理查询参数,再处理协议 - 路径含空格或特殊字符?确保变量用双引号包裹:
"$path",否则后续命令可能出错 - 不要用
grep或sed处理单个变量——启动子进程开销大,纯属杀鸡用牛刀

















