我正在尝试编写一个名为fish函数的函数jq_select_keys,它从给定的JSON中选择一个键的子集.
jq咒语做这件魔术是:
jq -r "with_entries(select([.key] | inside([\"bar\",\"baz\",\"qux\"])))" file.json
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试定义一个名为jq_select_keys的方便函数,它将获取我感兴趣的文件名和密钥,并吐出子集.这是我想出的:
function jq_select_keys --description 'Selects given keys from json input'
set key_names (for key in $argv[2..-1]; echo "\\\"$key\\\""; end)
set key_names_joined (string join "," $key_names)
set jq_args "\"with_entries(select([.key] | inside([$key_names_joined])))\""
echo "Command: jq -r $jq_args $argv[1]"
jq -r $jq_args $argv[1]
end
Run Code Online (Sandbox Code Playgroud)
当我在我的鱼壳jq_select_keys foo.json bar baz qux上运行时,我得到以下输出:
Command: jq -r "with_entries(select([.key] | inside([\"bar\",\"baz\",\"qux\"])))" foo.json
with_entries(select([.key] | inside(["bar","baz","qux"])))
Run Code Online (Sandbox Code Playgroud)
现在,有趣的是我可以复制粘贴echo语句的输出,并按预期运行.但我得到的输出只是我传递给jq的查询字符串.
我是shell编程的新手,所以我可能搞砸了我的引号.但除此之外,我不知道如何让这件事发挥作用!