Possible Duplicate:
How do ${0##*/} and ${0%/*} work?

I have encountered this type of syntax somewhere on the web :

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

how does this "${i%.avi}.mp4" and how can I use it ?


This is known as a parameter expansion. Everything to the right of .avi is removed, and .mp4 is concatenated onto the result.

If $i is "foo.avi", the result would be "foo.mp4". BashFAQ 73 has some good examples of other ways you can use parameter expansions for string manipulation.

  • I tried to edit your 2nd mp3 to mp4, but an edit for a single character is not allowed. – ott-- Jan 12 '13 at 18:50

It will remove the suffix .avi from $i (if present) and then concatenate the result with .mp4.

This is called parameter expansion.

The standard ones are described here: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_02

Your shell may or may not implement more of those, but if it does, using them will not guarantee portability.

Not the answer you're looking for? Browse other questions tagged or ask your own question.