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

csh如何使用变量修饰符从末尾带/的路径中提取上一级目录

csh 实现方案

可以通过拼接辅助路径段+链式调用变量修饰符的方式实现,适配末尾带/和不带/的两种场景,无需调用外部命令:

# 路径末尾无斜杠场景
% set x=a/b/c
% echo ${x}/.:h:h
a/b

# 路径末尾带斜杠场景
% set x=a/b/c/
% echo ${x}/.:h:h
a/b

原理:给原路径拼接/.后,无论原路径末尾是否存在斜杠,都会等效为[原路径去除末尾所有斜杠]/.的格式,第一次调用:h会得到去掉.后的路径[原路径去除末尾所有斜杠],第二次调用:h即可取到上一级目录。

bash 实现方案

核心思路是先移除路径末尾的斜杠,再删除最后一级路径,由于bash不支持嵌套参数展开,需要借助临时变量实现:

# 路径末尾无斜杠场景
$ x=a/b/c
$ tmp=${x%/}; echo ${tmp%/*}
a/b

# 路径末尾带斜杠场景
$ x=a/b/c/
$ tmp=${x%/}; echo ${tmp%/*}
a/b

原理:${x%/}会删除路径末尾的单个斜杠(如果不存在则不修改原路径),处理后得到末尾无斜杠的路径,再通过${tmp%/*}删除最后一段路径及前导斜杠,即可得到目标结果。

如果开启extglob选项的话也可以一次性移除末尾所有斜杠,效果一致:

shopt -s extglob
tmp=${x%%+(/)}; echo ${tmp%/*}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:45:03