当我尝试执行下面的脚本时出现错误:“curl:(3)URL使用错误/非法格式或缺少URL”
#!/bin/bash
stage="develop"
branch="branch_name"
getDefinition=$(curl -u user@example.com:password -X GET "https://dev.azure.com/organization/project/_apis/build/definitions?api-version=5.1")
for def in $(echo "$getDefinition" | jq '.value[] | select (.path=="\\Some_path\\'$stage'") | .id'); do
getBuildInfo=$(curl -u user@example.com:password -X GET "https://dev.azure.com/organization/project/_apis/build/definitions/${def}\?api-version=5.1")
# echo $def
body=$(echo "${getBuildInfo}" | jq '.repository.defaultBranch = "refs/heads/release/'"${branch}"'"' | jq '.options[].inputs.branchFilters = "[\"+refs/heads/release/'"${branch}"'\"]"' | jq '.triggers[].branchFilters[] = "+refs/heads/release/'"${branch}"'"')
echo ${body} > data.json
done
当我试图将变量**${def}**传递到一行时会发生这种情况:
curl -u user@example.com:password -X GET "https://dev.azure.com/organization/project/_apis/build/definitions/${def}\?api-version=5.1"
但是当我声明一个数组的时候,curl就像预期的那样工作了。
declare -a def
def=(1 2 3 4)
curl -u user@example.com:password -X GET "https://dev.azure.com/organization/project/_apis/build/definitions/${def}\?api-version=5.1"
你能建议我如何正确地将变量传递到URL中吗?
2条答案
按热度按时间pftdvrlh1#
你需要呼叫curl 4次吗?如果需要。
goucqfw62#
在脚本的顶部设置
IFS=$' \t\r\n'
。IFS
是交互式字段分隔符。在UNIX中,
IFS
是空格、制表符、换行符或$' \t\n'
,但在Windows中,它需要是$' \t\r\n'
。^M字符是
\r
。