2

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

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

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

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

Patryk
  • 13,556
  • 22
  • 53
  • 61

2 Answers2

3

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.

jordanm
  • 41,988
  • 9
  • 116
  • 113
  • 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
0

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.

Totor
  • 19,302
  • 17
  • 75
  • 102