Seu problema é que a expressão {...} é também sintaxe de shell válida. Por exemplo, execute:
echo file/{one,two}
E você recebe:
file/one file/two
Então, quando você corre:
curl --user $USER:$PASS https://api.example.com/{foo,bar,baz} -o '#1.json'
O {foo,bar,baz} está sendo interpretado pelo seu shell , e curl na verdade recebe a linha de comando:
curl --user youruser:secret https://api.example.com/foo https://api.example.com/bar https://api.example.com/baz -o '#1.json'
Como curl não vê a expressão {...} , você não recebe o
manipulação mágica para #1 . A solução é simplesmente incluir o URL
entre aspas simples:
curl --user $USER:$PASS 'https://api.example.com/{foo,bar,baz}' -o '#1.json'
As aspas simples inibem qualquer expansão de shell da string.