Dav*_*vid 6 linux json cmd echo
我有一个构建工具,它创建一个注入格式字符串的versions.json文件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
Run Code Online (Sandbox Code Playgroud)
然而echo似乎逃脱了所有的引号,所以我的文件最终会像这样:
{commit_id: b8f2b8b, environment: test, tags_at_commit: somereleasetags, project: someproject, current_date: 09/10/2014, version: someproject}
Run Code Online (Sandbox Code Playgroud)
遗憾的是,这不是有效的JSON.
Ark*_*klo 20
要保留双引号,您需要用单引号括起变量,如下所示:
json='{"commit_id": "b8f2b8b", "environment": "test", "tags_at_commit": "sometags", "project": "someproject", "current_date": "09/10/2014", "version": "someversion"}'
echo $json > versions.json
Run Code Online (Sandbox Code Playgroud)
请注意,此方法不会正确显示变量,而是打印文字$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
Run Code Online (Sandbox Code Playgroud)
如果你正在寻找一个更适合bash的更高级的json处理工具,我建议jq(http://stedolan.github.io/jq/manual/)