Bash: заменить часть имени файла

У меня есть команда, которую я хочу выполнить для всех файлов в папке, и синтаксис команды выглядит следующим образом:

tophat -o <output_file> <input_file>

Что я хотел бы сделать, так это сценарий, который перебирает все файлы в произвольной папке, а также использует имена входных файлов для создания похожих, но разных имен выходных файлов. Имена файлов выглядят так:

input name                desired output name
path/to/sample1.fastq     path/to/sample1.bam
path/to/sample2.fastq     path/to/sample2.bam

Получение ввода для работы кажется достаточно простым:

for f in *.fastq
do
     tophat -o <output_file> $f
done

Я пытался с помощьюoutput=${f,.fastq,.bam} и используя это в качестве выходного параметра, но это не работает. Все, что я получаю, это ошибка:line 3: ${f,.fastq,.bam}: bad substitution, Это способ делать то, что я хочу, или я должен делать что-то еще? Если это правильный путь, что я делаю не так?

[РЕДАКТИРОВАТЬ]:

Спасибо за ответы на все вопросы! Бонусный вопрос, однако ... Что делать, если у меня есть файлы с такими именами:

path/to/sample1_1.fastq
path/to/sample1_2.fastq
path/to/sample2_1.fastq
path/to/sample2_2.fastq
...

... где я могу иметь произвольное количество образцов (sampleX), но все они имеют два файла, связанных с ними (_1 а также_2). Команда теперь выглядит так:

tophat -o <output_file> <input_1> <input_2>

Итак, есть только один выход, для которого я мог бы сделать что-то вроде"${f/_[1-2].fastq/.bam}", но я не уверен, как получить цикл, который повторяется только один раз за каждыйsampleX одновременно принимая оба связанных файла ... Идеи?

[РЕДАКТИРОВАТЬ # 2]:

Итак, это последний сценарий, который сделал свое дело!

for f in *_1.fastq
do
        tophat -o "${f/_1.fastq/.bam}"  $f "${f/_1.fastq/_2.fasq}"
done

Ответы на вопрос(3)

Ваш ответ на вопрос