この構文は「${i%.avi}.mp4」を意味します。

この構文は「${i%.avi}.mp4」を意味します。

重複の可能性:
${0##*/}と${0%/*}はどのように機能しますか?

Webのどこかでこの種の構文を見たことがあります。

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

この機能はどのように機能し、どのように"${i%.avi}.mp4"使用しますか?

答え1

これをパラメータ拡張と呼びます。右側の内容はすべて.avi削除され、.mp4結果にリンクされます。

「foo.avi」の場合、$i結果は「foo.mp4」です。バッシュFAQ 73文字列操作にパラメータ拡張を使用できる他の方法のいくつかの良い例があります。

答え2

.aviサフィックスがある場合は削除し、$i結果を.mp4

これをパラメータ拡張と呼びます。

標準は次のように説明されます。 http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_02

あなたのシェルはそれらの多くを実装することも実装しないかもしれませんが、もしそうなら、それを使っても移植性は保証されません。

関連情報