我正在尝试用“BAR”替换“${FOO}”(请注意:“${FOO}”不是 shell 变量 - 这是它在 json 中的显示方式,我无法控制 json)
这有效:
echo '{ "name": "${FOO}" }' | \
jq '.|(select (.name == "${FOO}") | .name) |= "BAR"'
{
"name": "BAR"
}
但是,如果我想以编程方式分配匹配值(MYVAR=FOO在这种情况下),我无法让它工作,例如
echo '{ "name": "${FOO}" }' | \
jq --arg MYVAR FOO '.|(select (.name == "${$MYVAR}") | .name) |= "BAR"'
{
"name": "${FOO}"
}
我的直觉是匹配字符串周围的引号是问题所在,因为这也有效:
echo '{ "name": "FOO" }' | \
jq --arg MYVAR FOO '.|(select (.name == $MYVAR) | .name) |= "BAR"'
{
"name": "BAR"
}