jq select 带有冒号的变量
jq select with variable that has colon
我有以下 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
有什么想法吗?
有很多可能性,有些比其他的更好。这是一个合理的方法,假设你有一个 Mac 或 Linux-like 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"
但是正如您已经看到的那样,很容易在反斜杠和引号的纠缠中迷失方向。
我有以下 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
有什么想法吗?
有很多可能性,有些比其他的更好。这是一个合理的方法,假设你有一个 Mac 或 Linux-like 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"
但是正如您已经看到的那样,很容易在反斜杠和引号的纠缠中迷失方向。