终端链式API调用问题:step2out无法在第三个请求中正常生效
多轮API调用变量失效问题解决
你的问题出在shell变量的引号解析规则上,具体原因和解决方法如下:
问题原因
你第三个curl请求的URL用了单引号包裹:
curl -v -k --location --request GET 'https://.....?param1=${step2out}'
在shell环境中,单引号会将内部所有内容当作纯文本字符串处理,不会解析${step2out}这个变量——也就是说,实际发送的请求参数是字符串${step2out},而非你预期的step2out变量值。这就是为什么单独用step2out的值运行能正常工作,但放在脚本里失效的核心原因。
解决方法
把包裹URL的单引号改成双引号即可,双引号会正常解析内部的变量:
step1out=$(out=$(curl ....) && step2out=$(curl...using step1out) && curl -v -k --location --request GET "https://.....?param1=${step2out}")
如果你的URL中存在其他需要单引号转义的特殊字符,也可以采用字符串拼接的方式:
step1out=$(out=$(curl ....) && step2out=$(curl...using step1out) && curl -v -k --location --request GET 'https://.....?param1='${step2out})
不过更推荐第一种双引号的写法,它能避免变量值中包含空格、&等特殊字符时出现的解析错误。
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

