我有一个脚本帮助我将一些数据发布到系统
我有一个功能
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编号而不是变量名?
答案 0 :(得分:1)
您需要使用双引号括起来的参数调用函数:
curler "$featureID" "$minReq"
没有双引号, shell执行分词, 而不是传递两个参数, 该函数将通过多个参数对它们进行分词。
根据经验, 你应该引用命令参数中使用的变量。