如何使用 jq 变量进行双向间接寻址?
How to do double-indirection with jq variables?
如何从数据构造变量名并访问该变量?
例如,它应该以某种方式给出 alpha 文件的内容:
jq '$.var"-file"' --slurpfile alpha-file <(echo 0) --slurpfile beta-file <(echo 1) <<<'{"var": "alpha"}'
它应该输出:
[
0
]
命名参数也可用于 jq 程序,如 $ARGS.named
。
所以有一个字典可以通过字符串名称从中提取变量:
jq '$ARGS.named["\(.var)-file"]' --slurpfile alpha-file <(echo 0) --slurpfile beta-file <(echo 1) <<<'{"var": "alpha"}'
产出
[
0
]
您可以这样使用 getpath
:
jq --slurpfile alphaFile <(echo 0) --slurpfile betaFile <(echo 1) '
.var as $ab | {alpha: $alphaFile, beta: $betaFile} | getpath([$ab])' <<< '{"var": "alpha"}'
更好的是:
jq --slurpfile alpha <(echo 0) --slurpfile beta <(echo 1) '
.var as $ab | {$alpha, $beta} | getpath([$ab])' <<< '{"var": "alpha"}'
如何从数据构造变量名并访问该变量?
例如,它应该以某种方式给出 alpha 文件的内容:
jq '$.var"-file"' --slurpfile alpha-file <(echo 0) --slurpfile beta-file <(echo 1) <<<'{"var": "alpha"}'
它应该输出:
[
0
]
命名参数也可用于 jq 程序,如 $ARGS.named
。
所以有一个字典可以通过字符串名称从中提取变量:
jq '$ARGS.named["\(.var)-file"]' --slurpfile alpha-file <(echo 0) --slurpfile beta-file <(echo 1) <<<'{"var": "alpha"}'
产出
[
0
]
您可以这样使用 getpath
:
jq --slurpfile alphaFile <(echo 0) --slurpfile betaFile <(echo 1) '
.var as $ab | {alpha: $alphaFile, beta: $betaFile} | getpath([$ab])' <<< '{"var": "alpha"}'
更好的是:
jq --slurpfile alpha <(echo 0) --slurpfile beta <(echo 1) '
.var as $ab | {$alpha, $beta} | getpath([$ab])' <<< '{"var": "alpha"}'