Глядя конкретно на ваш вопрос, кажется, что «где вы ошиблись» находится в расширении вашего параметра. Я думаю, вы пытались изменить значение i при именовании выходного файла здесь:
{$i%.}
Мне кажется, вы неправильно поставили знак доллара. Возможно, вы имели в виду:
${i%.}
Хотя честно говоря, это только удалило бы «.» от исходного имени файла. Принимая во внимание, что «filename.c» дал бы «filenamec.out». Вы, наверное, хотите:
${i%.*}
Это дало бы «filename.out». Этот синтаксис расширения параметра преобразуется в нежадное удаление -всего, что начинается с «.» и после. Для жадного удаления синтаксис будет:
${i%%.*}
Я надеюсь, что это лучше ответит на ваш вопрос, поскольку он относится к вашему коду.