jq选择带有冒号的变量

时间:2016-03-04 00:27:43

标签: jq

我有以下test.json文件

{
"name": "value1:value2",
"StartDate": "2015-09-01T04:00:00Z",
"EndDate": "2016-09-05T09:59:59Z"
}

以下jq命令适用于命令行:

jq 'select(.name=="value1:value2") | .EndDate' test.json

但是,如果我尝试在我的bash脚本中使用变量执行相同的命令,即

var="value1:value2"
endDateVar=$(jq "select(.name==""${var}") | .EndDate" test.json)

我收到以下错误:

error: syntax error, unexpected ':'
select(.name==value1:value2) | .EndDate                                            1 compile error

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

有许多可能性,有些可能性比其他更好。这是一个合理的方法,假设你有一个类似Mac或Linux的shell:

$ var="value1:value2"
$ jq --arg var "$var" 'select(.name==$var) | .EndDate' test.json
"2016-09-05T09:59:59Z"

为了更清楚地了解发生了什么,这里是一个等效的调用:

$ jq --arg v "$var" 'select(.name==$v) | .EndDate' test.json

你的方法当然也可以起作用,例如

$ jq "select(.name==\"""${var}""\") | .EndDate" test.json
"2016-09-05T09:59:59Z"

但正如您已经看到的那样,很容易迷失在反斜杠和引号的混乱中。