在 link returns 空行中用变量调用 curl

Calling curl with a variable in the link returns a blank line

我正在尝试制作一个小的 shell 脚本来从 c++ 参考网站获取信息,并且我想抓取该网站的不同页面。为此,我编写了以下代码:

curl -s http://www.cplusplus.com/reference/ | grep -oP '(?<=<a href= ").*?(?=">)'

这成功获取了给定页面的子页面,但是手动输入所有链接很乏味,所以我尝试这样做:

URL="algorithm" # <-- will be turned into an array
cr=$"\r"
URL=${URL%$cr}
#for loop:
curl "http://www.cplusplus.com/reference/${URL}"
#done

但是当我尝试 运行 时,文件 returns 一个空行,如何在功能上实现它?

要迭代 curl 所有返回的子页面,您可以将子页面存储在一个变量中,并 运行 为变量中的每个子页面创建一个 for 循环。然后,您可以在 for 循环中使用 url 并在 curl 命令中使用它。

childs=$(curl -s http://www.cplusplus.com/reference/ | grep -oP '(?<=<a href= ").*?(?=">)')
declare -a array=($childs)
for url in "${array[@]}"
do
    curl "http://www.cplusplus.com/reference/$url" 
done

编辑:使用 Charles 指出的数组

您也可以使用 wget 而不是 curl。 它会自动获取所有链接的页面。 使用

wget -r -l 1 http://www.cplusplus.com/reference/

-r 用于递归。 -l 1 用于递归级别。