如何使用双引号和单引号的bash变量

时间:2017-09-03 10:36:30

标签: json linux bash shell parsing

我正在为bash上的json写个人解析器。所以,我需要制作grep of line。例如,我的json文件的一部分。

{
    "host": "127.0.0.1",
    "hhost": "127.0.0.2",
}

当然,在尝试cat json.txt | grep host之后,我收到了:

"host": "127.0.0.1",
"hhost": "127.0.0.1",

我发现,如何在没有host的情况下仅查找hhost。我用了

cat json.txt | grep '"host"'

一切都很好

"host": "127.0.0.1",

但我想在bash脚本中使用它:

#!/bin/bash

#in a future, i want to read variable var from reading from console 
var=host
search='"$var"'
echo $search

结果,我有:

"$var"

我做错了什么?你能告诉我一下吗?

2 个答案:

答案 0 :(得分:2)

您可以使用jq来解析JSON文件,首先需要一个合适的有效json

{
  "host": "127.0.0.1",
  "hhost": "127.0.0.2"
}

然后你可以做类似的事情:

#/bin/sh

HOST=$(jq '.host' data.json)
echo $HOST
...

答案 1 :(得分:1)

如果你把一个变量放在bash中的单引号中,我就不会被评估,你应该只使用:

search="$var"

如果您希望变量用引号括起来,只需将它们转义为:

search="\"$var\""