Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将bash变量传递给JSON_Json_Bash_Curl_Github - Fatal编程技术网

如何将bash变量传递给JSON

如何将bash变量传递给JSON,json,bash,curl,github,Json,Bash,Curl,Github,我正在尝试编写一个示例脚本,在其中生成像“student-101…student-160”这样的名称。我需要发布JSON数据,当我发布数据时,我会得到一个JSON解析错误 这是我的剧本: name="student-10" for i in {1..1} do r_name=$name$i echo $r_name curl -i -H 'Authorization: token <token>' -d '{"name": $r_name, "private

我正在尝试编写一个示例脚本,在其中生成像“student-101…student-160”这样的名称。我需要发布JSON数据,当我发布数据时,我会得到一个JSON解析错误

这是我的剧本:

name="student-10"

for i in {1..1}
do
    r_name=$name$i
    echo $r_name
    curl -i -H 'Authorization: token <token>' -d '{"name": $r_name, "private": true}' "<URL>" >> create_repos_1.txt
    echo created $r_name
done
name=“学生-10”
对于{1..1}中的i
做
r_name=$name$i
echo$r_名称
curl-i-H'Authorization:token'-d'{“name”:$r_name,“private”:true}'>>create_repos_1.txt
echo创建了$r\u名称
完成
我总是遇到一个
“解析JSON时出现问题”
错误。我尝试过各种引用的组合,但似乎没有任何效果


我做错了什么?

首先,您的
name
属性是一个字符串,因此需要在json中为其添加双引号

其次,使用单引号,bash不会进行变量扩展:它不会用变量内容替换
$r\u name
(有关更多信息,请参阅)

总之,使用:

-d '{"name": "'"$r_name"'", "private": true}'

首先,您的
name
属性是一个字符串,因此需要在json中为其添加双引号

其次,使用单引号,bash不会进行变量扩展:它不会用变量内容替换
$r\u name
(有关更多信息,请参阅)

总之,使用:

-d '{"name": "'"$r_name"'", "private": true}'

不要;使用
jq
(或类似工具)使用变量输入构建正确引用的JSON

name="student-10"

for i in {1..1}
do
    r_name=$name$i
    jq -n --arg r_name "$r_name" '{name: $r_name, private: true}' |
      curl -i -H 'Authorization: token <token>' -d @- "<URL>" >> create_repos_1.txt
    echo created $r_name
done
name=“学生-10”
对于{1..1}中的i
做
r_name=$name$i
jq-n--arg r_name“$r_name”{name:$r_name,private:true}|
curl-i-H'Authorization:token'-d@-“”>>create\u repos\u 1.txt
echo创建了$r\u名称
完成
@-
参数告诉
curl
从标准输入读取数据(通过管道从
jq
)以用于
-d



类似于
“{\'name\”:“$r\u name\”,“'private\”:true}”
的方法可能会起作用,但如果
r\u name
包含任何需要在结果JSON中引用的字符,例如双引号或ASCII控制字符,则该方法很难看,并且也会失败。

不要;使用
jq
(或类似工具)使用变量输入构建正确引用的JSON

name="student-10"

for i in {1..1}
do
    r_name=$name$i
    jq -n --arg r_name "$r_name" '{name: $r_name, private: true}' |
      curl -i -H 'Authorization: token <token>' -d @- "<URL>" >> create_repos_1.txt
    echo created $r_name
done
name=“学生-10”
对于{1..1}中的i
做
r_name=$name$i
jq-n--arg r_name“$r_name”{name:$r_name,private:true}|
curl-i-H'Authorization:token'-d@-“”>>create\u repos\u 1.txt
echo创建了$r\u名称
完成
@-
参数告诉
curl
从标准输入读取数据(通过管道从
jq
)以用于
-d



类似于
“{\'name\”:“$r\u name\”,“'private\”:true}”的东西可能会起作用,但是如果
r\u name
包含任何需要在结果JSON中引用的字符,例如双引号或ASCII控制字符,那么它会很难看,并且也会失败。

另一个选项是使用
printf
来创建数据字符串:

printf -v data '{"name": "%s", "private": true}' "$r_name"
curl -i -H 'Authorization: token <token>' -d "$data" "$url" >> create_repos_1.txt
printf-v数据'{“名称”:“%s”,“private”:true}'$r_name”
curl-i-H'Authorization:token'-d“$data”“$url”>>create_repos_1.txt

另一个选项是使用
printf
创建数据字符串:

printf -v data '{"name": "%s", "private": true}' "$r_name"
curl -i -H 'Authorization: token <token>' -d "$data" "$url" >> create_repos_1.txt
printf-v数据'{“名称”:“%s”,“private”:true}'$r_name”
curl-i-H'Authorization:token'-d“$data”“$url”>>create_repos_1.txt

作为旁注,如果你开始用这种方式(从数据库、从web表单)推真名,那么请取悦他们。使用1值序列
{1..1}
有什么意义?@RuudHelderman这是个好建议!我会把它放在里面mind@RomanPerekhrest哦,现在就推一下。我以后会增加到60!顺便说一句,如果你开始用这种方式(从数据库、网络表单)推真名,那么请取悦他们。使用单值序列
{1..1}
有什么意义?@RuudHelderman这是一个很好的建议!我会把它放在里面mind@RomanPerekhrest哦,现在就推一下。我以后会增加到60!现在您的
$r_name
没有引号,因此当shell扩展它时,它将受到单词拆分和路径名扩展的影响。你想要
-d'{“name”:““$r_name””,“private”:true}”
这对我很有效。但是,我无法理解引号之间的区别:(您现在有了
$r_name
无引号,因此当shell扩展它时,它将进行分词和路径名扩展。您需要
-d'{“name”:“$r_name””,“private”:true}“
这对我来说很有效。但是,我无法理解引号之间的区别:(