Bash: substituir parte do nome do arquivo

Eu tenho um comando que quero executar em todos os arquivos de uma pasta, e a sintaxe do comando é semelhante a esta:

tophat -o <output_file> <input_file>

O que eu gostaria de fazer é um script que faça um loop em todos os arquivos em uma pasta arbitrária e também use os nomes dos arquivos de entrada para criar nomes de arquivos de saída semelhantes, mas diferentes. Os nomes dos arquivos são assim:

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

Colocar a entrada para trabalhar parece bastante simples:

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

Eu tentei usaroutput=${f,.fastq,.bam} e usando isso como parâmetro de saída, mas isso não funciona. Tudo o que recebo é um erro:line 3: ${f,.fastq,.bam}: bad substitution. É assim que se faz o que eu quero ou devo fazer outra coisa? Se for o caminho correto, o que estou fazendo de errado?

[EDITAR]:

Obrigado por todas as respostas! Uma pergunta bônus, no entanto ... E se eu tiver arquivos nomeados como este, em vez disso:

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

... onde eu posso ter um número arbitrário de amostras (sampleX), mas todos eles têm dois arquivos associados a eles (_1 e_2) O comando agora se parece com isso:

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

Então, ainda há apenas uma saída, para a qual eu poderia fazer algo como"${f/_[1-2].fastq/.bam}", mas não tenho certeza de como obter um loop que itere apenas uma vez a cadasampleX ao mesmo tempo em que pega os dois arquivos associados ... Idéias?

[EDIÇÃO # 2]:

Então, este é o script final que fez o truque!

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

questionAnswers(3)

yourAnswerToTheQuestion