Bash 卷曲误差;使用错误/非法格式的URL或缺少URL“;尝试将变量作为URL的一部分传递时

Bash 卷曲误差;使用错误/非法格式的URL或缺少URL“;尝试将变量作为URL的一部分传递时,bash,curl,jq,Bash,Curl,Jq,当我试图执行下面的脚本时,出现错误:“curl:(3)URL使用了错误/非法格式或缺少URL” 当我试图将变量${def}传递到一行时,会发生这种情况: curl -u user@example.com:password -X GET "https://dev.azure.com/organization/project/_apis/build/definitions/${def}\?api-version=5.1" 但是当我声明一个数组时,curl按预期工作。 例如: 您能建议我如何将变量正

当我试图执行下面的脚本时,出现错误:“curl:(3)URL使用了错误/非法格式或缺少URL”

当我试图将变量${def}传递到一行时,会发生这种情况:

curl -u user@example.com:password -X GET "https://dev.azure.com/organization/project/_apis/build/definitions/${def}\?api-version=5.1"
但是当我声明一个数组时,curl按预期工作。 例如:


您能建议我如何将变量正确地传递到URL中吗?

您需要调用curl 4次吗?如果是的话

for def in 1 2 3 4; do curl -u user@example.com:password -X GET "https://dev.azure.com/organization/project/_apis/build/definitions/${def}\?api-version=5.1"; done

尝试回显“-“$def”-”以查看是否存在不需要的前导字符或结尾字符,这些字符可能不会显示非打印字符,
echo
可能会将“-”误认为选项分隔符。我建议改为
echo“$def”|LC_ALL=C cat-vt
。或者在问题部分之前使用
set-x
,这样shell将在执行命令时打印命令(可能会对任何有趣的字符进行奇怪的引用/转义)。非常感谢@franzisk,@gordondavison!变量$def包含^M个字符。移除此卷曲后效果良好。问题已解决。变量包含^M个字符。去除这个卷发后效果很好。
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"
for def in 1 2 3 4; do curl -u user@example.com:password -X GET "https://dev.azure.com/organization/project/_apis/build/definitions/${def}\?api-version=5.1"; done