从 CRLF 文件复制来的行看起来像 proxy.example:8080,但变量实际上以回车符结尾。给变量加引号会保留该字符,而不会删除它。

对于每行一个完整代理 URL 的 Bash 文件:

target='https://api.example/'
while IFS= read -r proxy || [ -n "$proxy" ]; do
    proxy=${proxy%$'\r'}
    if [ -z "$proxy" ]; then
        continue
    fi
    curl --proxy "$proxy" --max-time 10 --url "$target"
done < ProxyList.txt

使用 http://proxy.example:8080 这类条目;HTTP 代理列表提供了可按此格式使用的公网地址候选。read 会去掉换行分隔符;后缀展开会在存在时删除一个末尾 CR。该条件也能处理没有换行符的最后一行非空内容。

IFS= 阻止 read 期间的字段拆分,-r 保留字面反斜杠。随后双引号把得到的 URL 作为单个 curl 参数传入。避免遍历命令替换的输出:shell 的单词拆分可能在 curl 看到之前改变文件的记录边界。

这只是规范化行尾。它不能修复错误的监听协议、缺失的端点或无法访问的服务。

相关文章