将Json引用为带有变量的$ arg bash(arg1 arg2未传递变量)

时间:2017-12-06 16:56:07

标签: json bash unix curl command-line-arguments

我有一个脚本帮助我将一些数据发布到系统

我有一个功能

function curler(){
#curl "https://secure.aha.io/api/v1/features/"$featureID"/requirements?access_token={myAccessToken}" -d "$minReq" -X POST -H "Content-type: Application/json" -H "Accept: application/json"
echo "https://secure.aha.io/api/v1/features/"$1"/requirements?access_token={myAccessToken}" -d "$2" -X POST -H "Content-type: Application/json" -H "Accept: application/json"
echo $1
echo $2
}

然后我调用传入$featureID的函数和我用json有效负载定义的minReq变量

minReq='{"requirement":{"name":"'$elementName' - Min 
Length","workflow_status":{"name":"Defined"},"description":"- 
Indicates the minimum length of strings or 
numbers.","assigned_to_user":{"email":"kelly@someEmail.com"}}}'

curler函数中,您可以看到我尝试使用实际变量名称和基于arg索引的$1$2进行引用

最终我想使用curl,但是为了测试我有回声

我用curler调用curler $featureID $minReq函数,其中featureID是字符串MDL-123$minReq包含我的json有效负载

echo输出以下内容

https://secure.aha.io/api/v1/features/mdl-149/requirements?access_token={myAccessToken} -d {"requirement":{"name":"Act-On -X POST -H Content-type: Application/json -H Accept: application/json

mdl-149
{"requirement":{"name":"Act-On

elements-mac27:脚本kellygold $

我所看到的是,当我将$minReq参数引用为$elementName

时,插入$minReq后我的有效负载$2被切断了

在上面的示例中,elementName是' act-on' $ elementName已定义,之前已从用户

收集

我还注意到,如果我将变量引用为本地名称$minReq,那么它会按预期工作

所以以下回声 echo "https://secure.aha.io/api/v1/features/"$1"/requirements?access_token={myaccesstoken}" -d "$minReq" -X POST -H "Content-type: Application/json" -H "Accept: application/json"

预期产出

https://secure.aha.io/api/v1/features/mdl-149/requirements?access_token={myAccessToken} -d {"requirement":{"name":"act-on - Min Length","workflow_status":{"name":"Defined"},"description":"- Indicatest the minimum length of strings or numbers.","assigned_to_user":{"email":"kelly@someEmail.com"}}} -X POST -H Content-type: Application/json -H Accept: application/json

mdl-149

{"requirement":{"name":"act-on
elements-mac27:Scripts kellygold$ 

为什么当我通过函数调用$minReq中传递的变量名称引用我的参数时,它按预期工作,但是当我传递$2时,它在插入变量后立即切断有效载荷?在保持数据的同时,如何引用arg编号而不是变量名?

1 个答案:

答案 0 :(得分:1)

您需要使用双引号括起来的参数调用函数:

curler "$featureID" "$minReq"

没有双引号, shell执行分词, 而不是传递两个参数, 该函数将通过多个参数对它们进行分词。

根据经验, 你应该引用命令参数中使用的变量。