You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash中无需启用extglob高效获取目录/文件basename的方法

路径基名处理问题

我有如下Bash函数:

get_base() { echo "${1##*/}"; }

该函数在路径无末尾斜杠时能正常工作,但遇到1个或多个末尾斜杠时会失效。

我找到一个解决方案,但需要启用extglob特性,而我不想启用该特性:

x='/home/ari///'
echo "${x%%+(/)}"
# 输出结果:/home/ari

之后可以将处理后的结果存入临时变量,再执行basename替换操作。

我的问题是:是否存在一种合规的实现方式,既能保证高效(不调用外部命令,因为该函数会被频繁调用),又无需启用任何特殊特性?

问答环节

  • 提问:《Get last dirname/filename in a file path argument in Bash》是否能解答你的问题?
    回答:不能,因为这些方案要么使用外部命令,要么替换表达式仅能去除最后一个斜杠而非多个(例如:/home/ari///使用${x%/}处理后仅变为/home/ari//,而我需要得到/home/ari)。
  • 提问:你所说的“合规”指什么?
    回答:“合规”指无需启用extglob或其他特殊特性。

内容的提问来源于stack exchange,提问作者user17411100

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 04:50:24