${i%.*}在这种情况下做什么



我正在学习如何在linux终端中运行bash脚本,特别是在转换音频视频文件的上下文中。

我在SO上看到了这个命令,它正是我想要的。然而,我想更好地理解它:

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

现在,这显然是一个for-loop,我得到了第一个*通配符。我得到了do块。但我不太明白的是${i%.*}。具体来说,%.*位在输出位置做什么?为什么不使用${i}.mp4

它被称为参数扩展,它删除了从最后一个点开始的所有内容(即扩展(。尝试以下操作:

$ i="foo.bar.baz"
$ echo ${i%.*}
foo.bar

原始代码("${i%.*}.mp4"(的作者显然想用.mp4替换原始扩展,因此删除了原始扩展并添加了.mp4

参数扩展

${parameter%word}

${parameter%%word}

单词被展开以产生模式,并根据下面描述的规则进行匹配(请参阅模式匹配(。如果模式匹配参数扩展值的尾部,则扩展的结果是删除了匹配模式最短("%"情况(或匹配模式最长("%%"情况(的参数值

最新更新