小编Cub*_*bre的帖子

如何编写委托给jq的fish函数?

我正在尝试编写一个名为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编程的新手,所以我可能搞砸了我的引号.但除此之外,我不知道如何让这件事发挥作用!

shell fish jq

2
推荐指数
1
解决办法
141
查看次数

标签 统计

fish ×1

jq ×1

shell ×1