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

