不清楚的curl选项-o <文件名#1>。 “#”到底是做什么的?

时间:2019-05-24 22:58:43

标签: bash shell curl

我想下载几个文件,并使用Curl在文件名中使用变量。

例如: curl https://curl.haxx.se/docs/{companies,whodocs}.html -o "file_#1.txt"

我正在使用curl 7.61.1

在Curl手册页中,我发现文件名中的#number应该用一些字符串替换。因此,我假设我应该得到file_companies.txtfile_whodocs.txt,但就我而言,此命令只是下载file_#1.txt并将第二个文件打印到stdout(就像没有-o <filename>一样)。所以我想知道如何使用此选项。

任何解释将不胜感激。谢谢。

1 个答案:

答案 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

这不是您想要的。您想照原样通过{...}来卷曲。您需要引用它。