如何从 Make 中将文字变量模板传递给 jq?
How do I pass literal variable templates to jq from within Make?
我正在尝试在 Makefile 中使用 jq 来生成 json 文件。这是一个示例 Makefile
foo.json:
jq -n --arg x "bar" '{"foo": "$$x"}' > foo.json
@cat foo.json
@rm foo.json
当我 运行 使用 GNU Make v4.3 和 jq v1.6 时,我得到以下结果
make
jq -n --arg x "bar" '{"foo": "$x"}' > foo.json
{
"foo": "$x"
}
请注意 $x
按字面显示,并没有被 jq 插入。我如何实现以下...
make
jq -n --arg x "bar" '{"foo": "$x"}' > foo.json
{
"foo": "bar"
}
您根本不需要将变量用引号引起来:
jq -n --arg x "bar" '{foo: $x}'
或者使用字符串插值:
jq -n --arg x "bar" '{foo: "\($x)"}'
感谢@customcommander 的提示。答案根本不是引用美元符号或 var。更新的 Makefile 确认工作...
$ cat Makefile
foo.json:
jq -n --arg x $X '{"foo": $$x}' > foo.json
@cat foo.json
@rm foo.json
$ X=123 make
jq -n --arg x 123 '{"foo": $x}' > foo.json
{
"foo": "123"
}
$ X=456 make
jq -n --arg x 456 '{"foo": $x}' > foo.json
{
"foo": "456"
}
我最终完全避免了 jq --arg
,并采用了 更简单 的方法。
示例生成文件:
# the arg to pass to jq
SOME_VAR?=my-var
foo.json:
jq -n '{"foo": "'"$(SOME_VAR)"'"}' > foo.json
@cat foo.json
@rm foo.json
用法示例:
$ make foo.json
jq -n '{"foo": "'"my-var"'"}' > foo.json
{
"foo": "my-var"
}
带引号的变量也有效:
$ SOME_VAR="hi" make foo.json
jq -n '{"foo": "'"hi"'"}' > foo.json
{
"foo": "hi"
}
我正在尝试在 Makefile 中使用 jq 来生成 json 文件。这是一个示例 Makefile
foo.json:
jq -n --arg x "bar" '{"foo": "$$x"}' > foo.json
@cat foo.json
@rm foo.json
当我 运行 使用 GNU Make v4.3 和 jq v1.6 时,我得到以下结果
make
jq -n --arg x "bar" '{"foo": "$x"}' > foo.json
{
"foo": "$x"
}
请注意 $x
按字面显示,并没有被 jq 插入。我如何实现以下...
make
jq -n --arg x "bar" '{"foo": "$x"}' > foo.json
{
"foo": "bar"
}
您根本不需要将变量用引号引起来:
jq -n --arg x "bar" '{foo: $x}'
或者使用字符串插值:
jq -n --arg x "bar" '{foo: "\($x)"}'
感谢@customcommander 的提示。答案根本不是引用美元符号或 var。更新的 Makefile 确认工作...
$ cat Makefile
foo.json:
jq -n --arg x $X '{"foo": $$x}' > foo.json
@cat foo.json
@rm foo.json
$ X=123 make
jq -n --arg x 123 '{"foo": $x}' > foo.json
{
"foo": "123"
}
$ X=456 make
jq -n --arg x 456 '{"foo": $x}' > foo.json
{
"foo": "456"
}
我最终完全避免了 jq --arg
,并采用了 更简单 的方法。
示例生成文件:
# the arg to pass to jq
SOME_VAR?=my-var
foo.json:
jq -n '{"foo": "'"$(SOME_VAR)"'"}' > foo.json
@cat foo.json
@rm foo.json
用法示例:
$ make foo.json
jq -n '{"foo": "'"my-var"'"}' > foo.json
{
"foo": "my-var"
}
带引号的变量也有效:
$ SOME_VAR="hi" make foo.json
jq -n '{"foo": "'"hi"'"}' > foo.json
{
"foo": "hi"
}