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
相关产品推荐
相关产品推荐

