如何将 bash 变量传递给 JSON

Sat*_*ian 3 bash json 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": true}' "<URL>" >> create_repos_1.txt
    echo created $r_name
done
Run Code Online (Sandbox Code Playgroud)

我总是收到"Problems parsing JSON"错误。我尝试过各种引号组合等,但似乎没有任何效果!

我究竟做错了什么?

Der*_*lin 7

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

其次,使用单引号,bash 不会进行变量扩展:它不会替换$r_name为变量内容(有关详细信息,请参阅bash shell 脚本中命令中单引号内的变量扩展)。

总之,使用:

-d '{"name": "'"$r_name"'", "private": true}'
Run Code Online (Sandbox Code Playgroud)

  • 现在,`$r_name` 已不带引号,因此当 shell 扩展它时,它将受到分词和路径名扩展的影响。你想要 `-d '{"name": "'"$r_name"'", "private": true}'` (2认同)

gle*_*man 5

另一种选择是使用printf创建数据字符串:

printf -v data '{"name": "%s", "private": true}' "$r_name"
curl -i -H 'Authorization: token <token>' -d "$data" "$url" >> create_repos_1.txt
Run Code Online (Sandbox Code Playgroud)