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

循环执行curl请求出现无法解析主机错误的解决方法

问题原因

你的脚本报错是因为数组元素包含前导空格,导致curl命令被错误解析。

原代码中IFS=','仅按逗号分割字符串,"key1, key2, key3..."分割后,每个后续元素(比如" key2")都带前导空格。当拼接URL时,?key=$key会变成?key= key2——bash会把空格后的key2识别为curl的新目标主机参数,从而触发Could not resolve host:key2错误。

修复方案

有两种简单的修复方式:

方式1:修改IFS同时分割逗号和空格

直接把IFS设为, ,让read命令同时按逗号和空格分割字符串,避免数组元素带空格:

IFS=', ' read -ra keys <<< "key1, key2, key3, key4, key5"
for key in "${keys[@]}"
do
  echo "Deleting cache for key: $key"
  # 给URL加双引号,防止bash解析特殊字符
  response=$(curl -X DELETE \
                  -H "Accept: application/vnd.github+json" \
                  -H "Authorization: Bearer GITHUB_TOKEN"\
                  -H "X-GitHub-Api-Version: 2022-11-28" \
                  "https://api.github.com/repos/OWNER/REPOSITORY/actions/caches?key=$key")
  if [ $? -ne 0 ]; then
    echo "Error occurred while deleting key $key"
    continue
  fi
  echo "Response for key $key: $response"
done

方式2:循环内去除元素的前后空格

如果不想修改IFS,可以在循环里用xargs去除每个key的前后空格:

IFS=',' read -ra keys <<< "key1, key2, key3, key4, key5"
for key in "${keys[@]}"
do
  # 去除key的前后空格
  key=$(echo "$key" | xargs)
  echo "Deleting cache for key: $key"
  response=$(curl -X DELETE \
                  -H "Accept: application/vnd.github+json" \
                  -H "Authorization: Bearer GITHUB_TOKEN"\
                  -H "X-GitHub-Api-Version: 2022-11-28" \
                  "https://api.github.com/repos/OWNER/REPOSITORY/actions/caches?key=$key")
  if [ $? -ne 0 ]; then
    echo "Error occurred while deleting key $key"
    continue
  fi
  echo "Response for key $key: $response"
done

额外提醒:始终给包含变量的URL加双引号,防止bash对特殊字符(比如空格、&)做意外解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:57:25