shell 输出json格式的内容
对于shell脚本的输出,如果要输出json格式的内容,我们可以借助python -m json.tool命令
比如
echo ‘{"name":"zhangsan", "age":"18"}‘ | python -m json.tool
![shell 输出json格式的内容 shell 输出json格式的内容](https://cdn.ancii.com/article/image/v1/R-/QZ/vq/qvQ-ZR4TACSNoCK4X19CLJcVgqiqdRCgjM3ZKbkNkifEYi_mtpqAcjTA40jxPLUNW1wr5mEQy7IT3dw3WP9zwmQhexhMeYxZ6yrOg6GQ7bbdhMEG7y_heojsODajVcEw_XqsSOqsaI_3wQG6s90EaXuItMGIya29kJpIyX6ZodccrcEqhM5fgkwr63HruuOB.jpg)
首先,大括号外面必须有单引号‘‘,因为在shell里面大括号{}不用单引号引起来就相当于一个匿名函数,
不加单引号就等价去echo 输出 {"name":"zhangsan", "age":"18"}这个匿名函数的返回值。
其次,大括号里面的字符串,必须用"" 双引号,不能用‘‘单引号,否则会报错。
当大括号中带有变量时该怎么输出呢?
echo 后面的内容已经被‘‘单引号引起来了,shell自身已经不可能再去解析变量了,那么只能我们职级手动去解析,这时候就想到eval命令,eval的一个功能就是将自己的参数变量进行展开,具体关于eval的命令,自行网上搜索吧,下面直接给出答案。
echo $(eval echo ‘{"name":"zhangsan", "age":""$age""}‘) | python -m json.tool
![shell 输出json格式的内容 shell 输出json格式的内容](https://cdn.ancii.com/article/image/v1/R-/QZ/vq/qvQ-ZR4TACSNoCK4X19CLJcVgqiqdRCgjM3ZKbkNkifEYi_mtpqAcjTA40jxPLUN26wSK17ISMVp9CcyYgv4eTKeYc94HShsDcFaN0xxBDDdhMEG7y_heojsODajVcEw_XqsSOqsaI_3wQG6s90EaYrSHHH9vSwSg01GUZe2LqNmNO8ZDAkaHTe06cHzcrIx.jpg)
注意,第一个echo不是必须的,所以也可以是eval echo ‘{"name":"zhangsan", "age":""$age""}‘ | python -m json.tool。但是大括号里面的""双引号必须用反斜杠\标注出来,因为eval在进行变量展开的时候,会将大括号中的""解析掉,当不加反斜杠\时,输出就变成了
![shell 输出json格式的内容 shell 输出json格式的内容](https://cdn.ancii.com/article/image/v1/R-/QZ/vq/qvQ-ZR4TACSNoCK4X19CLJcVgqiqdRCgjM3ZKbkNkifEYi_mtpqAcjTA40jxPLUN2O9KcX6BpJ-frWD8vkK8GLE67u81kq9LfQVvNqwT2pfdhMEG7y_heojsODajVcEw_XqsSOqsaI_3wQG6s90EaRDzpeNyiVkch5SpRgTfb8YcrcEqhM5fgkwr63HruuOB.jpg)
而对于python -m json.tool, ""双引号是必须的。 所以大括号里面的""双引号必须用反斜杠\标注出来。