尝试将jq与--arg选项一起使用时的Shell引用问题

时间:2019-12-04 16:00:11

标签: json shell jq

我在让jq与-r--arg选项一起使用来引用变量并避免“ shell引用”问题时遇到问题。

现有主题here建议使用--arg定义命令。我已经尝试过在此shell函数中设计该函数,以接收日志输入并将其解析为json(如果它可以解析为json)。如果不是,则将其作为字符串转储出去。

function pparselogs () {
    while read data
    do
        jq --arg line "$data" -R -r '. as $line | try fromjson catch $line'
    done
}

我一直遇到的错误如下:

> echo "Hello World" | pparselogs .   
jq: error: syntax error, unexpected '|', expecting '$' or '[' or '{' (Unix shell quoting issues?) at <top-level>, line 1:
. as  | try fromjson catch
jq: 1 compile error

鉴于该错误抱怨着|,似乎"$data"的arg值没有被拾取。但是,鉴于上面提到的答案,这应该是这样做的方法。我看不到我在哪里犯错。

有人在这里看到问题吗?

1 个答案:

答案 0 :(得分:3)

您可以将其用作shell函数:

pparselogs() {
   while read data; do
      echo "$data" | jq -rR '. as $line | try fromjson catch $line'
   done
}

然后将其与无效的json一起使用:

echo 'Hello World' | pparselogs

Hello World

并带有有效的json

echo '{"id":1, "message":"Hello World"}' | pparselogs

{
  "id": 1,
  "message": "Hello World"
}