我想下载几个文件,并使用Curl在文件名中使用变量。
例如:
curl https://curl.haxx.se/docs/{companies,whodocs}.html -o "file_#1.txt"
我正在使用curl 7.61.1
在Curl手册页中,我发现文件名中的#number
应该用一些字符串替换。因此,我假设我应该得到file_companies.txt
和file_whodocs.txt
,但就我而言,此命令只是下载file_#1.txt
并将第二个文件打印到stdout(就像没有-o <filename>
一样)。所以我想知道如何使用此选项。
任何解释将不胜感激。谢谢。
答案 0 :(得分:2)
Bash's brace expansion妨碍了您。您应该引用{ ... }
。
$ curl 'https://curl.haxx.se/docs/{companies,whodocs}.html' -o "file_#1.txt"
[1/2]: https://curl.haxx.se/docs/companies.html --> file_companies.txt
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 29316 100 29316 0 0 5097 0 0:00:05 0:00:05 --:--:-- 7540
[2/2]: https://curl.haxx.se/docs/whodocs.html --> file_whodocs.txt
100 2528 100 2528 0 0 23849 0 --:--:-- --:--:-- --:--:-- 23849
{companies,whodocs}
通过bash扩展为两个参数:
$ echo curl https://curl.haxx.se/docs/{companies,whodocs}.html -o "file_#1.txt"
curl https://curl.haxx.se/docs/companies.html https://curl.haxx.se/docs/whodocs.html -o file_#1.txt
这不是您想要的。您想照原样通过{...}
来卷曲。您需要引用它。