首页 > 解决方案 > jq:传递不带引号的字符串参数

问题描述

我想传递一个不带引号的参数(JQ arg 默认有双引号),因为它应该用作过滤器。例如

propt='.properties'
final=($(jq -r -c --arg p $propt '$p' sample.json))
echo $final

示例.json

{
  "type": "object",
  "description": "Contains information",
  "properties": {
    "type": {
      "description": "Type"
        }
   }
}

所以最终它会打印出来,.properties而不是预期的{"type":{"description":"Type"}} 我为此目的使用 bash shell。

请让我知道我做错了什么。

标签: jq

解决方案


如果我理解正确,您会因为认为需要在 中设置一个变量jq而不是让 shell 进行扩展而偏离了方向:

% foo='.properties'
% jq -r -c  "$foo" sample.json 

输出:

{"type":{"description":"Type"}}

注意 $foo 上的双引号仍然允许 shell 将变量扩展为 .properties。那就是说你可以不安全地使用:jq -r -c $foo sample.json


推荐阅读