如何将bash脚本变量传递给--arg?

时间:2020-04-08 10:27:21

标签: bash jq

我试图通过将jq if语句与test和regex一起使用来解析项目声纳数据库

jq -r 'if (.name | test("\\.example\\.com$")) then . else empty end'

并且我以脚本形式尝试了

zcat sonar.json.gz | jq --arg a "$b" -r 'if (.name | test($a)) then . else empty end'

而b =“ \。example \ .com $”

(在这里我实际上使用sed从用户输入创建正则表达式)。

如果我运行它,则无输出。如果我将--arg设置为“ \\。example \\。com $”,则可以正常运行。

将脚本变量解析为正则表达式时是否存在读取问题?

2 个答案:

答案 0 :(得分:0)

我怀疑您的问题出在报价单上。

您没有提供足够的信息来提供准确的答案,但这是一个简单的bash脚本,它使用jq传递的模式运行--arg,您可以尝试使用该模式。请注意,在对A的赋值中使用了单引号。

#!/bin/bash
A='\.example\.com$'
echo A is $A
jq -M --arg a "$A" 'select(.value | test($a))'

给出以下输入

{ "value": "foo" }
{ "value": "foo.example.com" }

它产生

A is \.example\.com$
{
  "value": "foo.example.com"
}

(请注意,我通常使用-M来确保没有颜色添加到输出中)

Try it online!

答案 1 :(得分:0)

使用bash:

const [quantity, setQuantity] = useState({breakfast: 0, lunch: 0, dinner: 0});

const onChangeQuantity = (value, type) => {
    let qty = quantity;
    qty[type] = value;

    //console.log(qty);  
    //{"breakfast": 0, "dinner": 0, "lunch": 6}

    setQuantity(qty);
  };