CURL Post with Variable作为参数不起作用

时间:2017-05-16 10:46:37

标签: shell variables curl jenkins

我编写了一个shell脚本,它使用curl命令构建带参数的Jenkins作业。以下是代码。

#!/bin/bash
val3=( $(cut -d ',' -f3 csvfile.csv) )
printf "%s\n" "${val3[0]}"
echo $val3

curl -X POST https://my-jenkins.abc.com/inst/job/Aut/job/pipe-workflow/job/Job3/build \
 --user user:token \
  --data-urlencode json='{"parameter": [{"name":"valA", "value":"${val3}"}]}'

我正在读取一个名为'csvfile.csv'的文件,并在curl命令中传递$ val3的值。 $ val3的输出是'John'。我无法在curl中替换$ val3的值。这是文学。我也尝试过,但没有人帮助过。

--data-urlencode json='{"parameter": [{"name":"valA", "value":"$val3"}]}'

--data-urlencode json='{"parameter": [{"name":"valA", "value":"${val3[0]}"}]}'

--data-urlencode json='{"parameter": [{"name":"valA", "value":"val3"}]}'

--data-urlencode json='{"parameter": [{"name":"valA", "value":"${val3}"}]}'

--data-urlencode json="{"parameter": [{"name":"valA", "value":"${val3}"}]}"

以上都不起作用。最后一个是抛出错误。当我在Jenkins作业中看到时,参数的值如下:

$ val3,val3,$ {val3}

它取而代之的是取代该值。

printf "%s\n" "${val3[0]}"
echo $val3

以上两行给我的输出为约翰,但是当它卷曲时,它不起作用。造成这种情况的原因是什么?如何解决?

提前谢谢

1 个答案:

答案 0 :(得分:1)

以下是我可以看到的一些问题:

val3=( $(cut -d ',' -f3 csvfile.csv) )

这会创建一个数组,所以你可能想要这个:

val3=$(cut -d ',' -f3 csvfile.csv)

然后你的变量应该像这样插入:

--data-urlencode json="{\"parameter\": [{\"name\": \"valA\", \"value\":\"$val3\"}]}"

您可能还想考虑使用像jq这样的工具来生成JSON:

json="$(jq -nc --arg v "$var3" '{ parameter: [{ name: "valA", value: $v }] }')"