我有以下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
有什么想法吗?
答案 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"
但正如您已经看到的那样,很容易迷失在反斜杠和引号的混乱中。