echo json over命令行到文件中

时间:2014-10-09 10:40:43

标签: json linux cmd echo

我有一个构建工具,它创建了一个用json格式字符串注入的 versions.json 文件。

最初我只想通过回声注入json,如下所示。

json = {"commit_id": "b8f2b8b", "environment": "test", "tags_at_commit": "sometags", "project": "someproject", "current_date": "09/10/2014", "version": "someversion"}

echo -e json > versions.jso

然而,echo似乎逃脱了所有的引号,所以我的文件最终会是这样的:

{commit_id: b8f2b8b, environment: test, tags_at_commit: somereleasetags, project: someproject, current_date: 09/10/2014, version: someproject}

遗憾的是,这不是JSON。

1 个答案:

答案 0 :(得分:16)

要保留双引号,您需要用单引号括起变量,如下所示:

json='{"commit_id": "b8f2b8b", "environment": "test", "tags_at_commit": "sometags", "project": "someproject", "current_date": "09/10/2014", "version": "someversion"}'
echo $json > versions.json

考虑到此方法无法正确显示变量,而是打印文字$variable

如果需要打印变量,请使用cat << EOF构造,该构造利用bash中内置的Here Document重定向。有关详细信息,请参阅man bash并搜索“此处文档”。

示例:

commit="b8f2b8b"
environment="test"
...etc

cat << EOF > /versions.json
{"commit_id": $commit, "environment": $environment, "tags_at_commit": $tags, "project": $project, "current_date": $date, "version": $version}
EOF

如果您正在寻找一种与bash配合得更好的更高级的json处理工具,我建议jqhttp://stedolan.github.io/jq/manual/