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

Linux终端Bash脚本中${i%.*}的作用是什么?

理解Bash中的${i%.*}参数扩展

嘿,这个问题问得特别到位!很多刚接触Bash脚本的同学都会对这个语法感到困惑,我来一步步给你讲清楚:

核心功能:${i%.*}是什么?

这是Bash里**参数扩展(Parameter Expansion)**的一种用法,专门用来对变量值进行字符串处理:

  • % 符号表示:从变量的末尾(右侧)开始,匹配指定的模式,然后删除最短的匹配部分
  • .* 是我们指定的匹配模式:意思是「从最后一个.开始,到字符串末尾的所有内容」

举个实际的例子就明白了:
如果变量i的值是my.video.file.avi,那么:
${i%.*} 会匹配到最后一个.后面的avi,删除后得到my.video.file,再加上.mp4,最终输出文件名就是my.video.file.mp4——这正是我们想要的「替换后缀为mp4」的效果。

为什么不能直接用${i}.mp4?

如果直接写${i}.mp4,那输出的文件名会变成原文件名+双后缀:
比如i是demo.avi,结果就会是demo.avi.mp4,既不美观,还可能导致播放器无法正确识别文件格式,完全不符合我们转换音视频格式的需求。

额外补充:如果要删除所有后缀怎么办?

如果你的文件名有多个.,而你想彻底删掉所有后缀(比如把a.b.c.avi变成a),可以用%%符号——它表示从末尾开始删除最长的匹配部分:
${i%%.*} 会匹配从第一个.到末尾的所有内容,最终得到a。不过在你的音视频转换场景里,%.*才是最适用的,因为我们只需要替换最后一个格式后缀。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:57:28