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

如何在Zsh中获取带点的文件扩展名(单行实现)

Zsh中简洁获取带点文件扩展名的方法

直接给两种单行实现方案,完美满足需求:

方案一:利用参数展开的条件判断语法

# 示例使用
filename="one.two"
echo "${filename:e:+.$filename:e}"  # 输出 .two

filename="none"
echo "${filename:e:+.$filename:e}"  # 输出空字符串

原理:${param:+word}是Zsh的核心参数展开语法——当param不为空时,展开成指定的word;如果param为空,整个表达式就为空。这里${filename:e}负责提取扩展名(无扩展名时返回空),所以有扩展名时会拼接出.扩展名,无扩展名时直接返回空。

方案二:通过字符串截取实现

# 示例使用
filename="one.two"
echo "${filename#${filename%.*}}"  # 输出 .two

filename="none"
echo "${filename#${filename%.*}}"  # 输出空字符串

原理:

  1. ${filename%.*}会去掉文件名中最后一个.及其后面的内容,得到文件的主体部分(比如one.two会变成one,none还是none)
  2. ${filename#主体部分}会从原文件名中去掉前面匹配到的主体部分,剩下的就是带点的扩展名;如果没有扩展名,主体部分就是原文件名,去掉后自然为空。

补充说明

你之前尝试的"${existing:r}-$count.${existing:e}"会在无扩展名时多出一个.,是因为${existing:e}为空时,.会被保留。上面的两种方案都能彻底避免这个问题,无需写繁琐的if判断逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 18:52:33