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.