You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用wget读取含$符号的URL下载时遇403错误的解决方法

解决bash脚本中wget下载含$符号URL的403错误

问题根源

你遇到的403错误主要来自两个问题:

  • 脚本读取URL时的逻辑错误:原脚本既重复读取文件,又用错误的分隔符拆分URL行,导致传递给wget的是不完整的URL片段
  • 直接在脚本中用双引号写URL时,bash会解析其中的$somefile为变量(若未定义则为空),但从文件读取URL时,只要读取和传递方式正确,$不会被错误解析

正确脚本写法

方案1:逐行读取并下载(推荐)

直接读取文件的每一行作为完整URL,避免拆分:

while IFS= read -r url; do
    wget "$url"
done < file.txt
  • IFS=:保证读取整行内容,包括开头/结尾的空格,不会按默认分隔符拆分
  • read -r:禁止反斜杠转义,避免URL中的反斜杠被错误处理
  • "$url":双引号包裹变量,确保URL中的$、&等特殊字符原样传递给wget,bash不会解析URL内部的$符号

方案2:用数组存储URL后批量下载

如果需要先存储所有URL再处理,用mapfile读取整行到数组:

mapfile -t urls < file.txt

for url in "${urls[@]}"; do
    wget "$url"
done
  • mapfile -t:将文件每行作为数组元素,自动去除行尾换行符,不会拆分URL
  • "${urls[@]}":遍历数组时用双引号包裹,保证每个URL完整传递

原脚本错误分析

  1. files=($(< file.txt)):会按空格、换行等分隔符拆分文件内容,若URL含特殊分隔符会被拆成多个片段
  2. while IFS='=| ' read -r param uri:用=、|、空格作为分隔符拆分每行,会截断URL,导致传递给wget的不是完整地址

内容的提问来源于stack exchange,提问作者Marcel Hoekstra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 02:45:17