循环执行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
相关产品推荐
相关产品推荐

