El problema es que el nombre del archivo se evalúa solamente una vez, no cada vez que se llama a curl.
 
Alternativas:
Podés usar wget, que por defecto escribe un archivo con el mismo nombre que el archivo que descarga.
Otra forma posible es usar for en BASH, llamando a curl una vez por cada archivo a descargar. 
Forma con curl, extraída del manual (
man curl) 
Código:
 -o/--output <file>
              Write output to <file> instead of stdout. If you are using {} or [] to fetch multiple documents, you can use  '#'
              followed  by a number in the <file> specifier. That variable will be replaced with the current string for the URL
              being fetched. Like in:
                curl http://{one,two}.site.com -o "file_#1.txt"
              or use several variables like:
                curl http://{site,host}.host[1-5].com -o "#1_#2"
              You may use this option as many times as the number of URLs you have.
              See also the --create-dirs option to create the local directories dynamically. Specifying the output  as  '-'  (a
              single dash) will force the output to be done to stdout.
  
Saludos.