首页 > 解决方案 > 终端中的变量 ${i%.*} 是什么意思?

问题描述

这个shell命令根据@llogan的这个答案将所有.avi转换为.mp4

有人可以解释${i%.*} 的工作原理吗?特别是 % 是做什么的?

for i in *.avi; do ffmpeg -i "$i" "${i%.*}.mp4"; done

标签: variablesffmpegterminal

解决方案


BashGuide/Parameters/Parameter Expansion

${parameter%pattern}
pattern结尾匹配 parameter。结果是parameter删除了最短匹配的扩展值。

如何在 bash 中进行字符串操作?

意思是“%从变量内容的末尾删除最短的匹配”

换句话说,如果parameter(i在您的情况下) 的扩展值是myvideo.avi,那么%.*将导致myvideo. 这样输出文件最终不会被命名myvideo.avi.mp4,而是被命名myvideo.mp4


推荐阅读