我有一个构建工具,它创建了一个用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。
答案 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处理工具,我建议jq
(http://stedolan.github.io/jq/manual/)