使用 kislyuk/yq returns 语法错误,意外的 INVALID_CHARACTER 末尾附加 /0

Using kislyuk/yq returns syntax error, unexpected INVALID_CHARACTER with additional /0 at the end

我用的是kislyuk/yq - 比较常说的版本,是对jq的封装,用Python写的,使用PyYAML库进行YAML解析

版本为yq 2.12.2

我的jq是jq-1.6

我正在使用 ubuntu 和 bash 脚本进行解析。

我写成bash

alias=alias1
token=abc

yq -y -i  ".tokens += { $alias: { value: $token }}" /root/.github.yml

我收到以下错误

jq: error: abc/0 is not defined at <top-level>, line 1:
.tokens += { alias1: { value: abc }}

我不明白。为什么最后会有一个/0?

问题是当双引号被 shell 扩展时,abc 没有被解释为 文字 字符串。底层 jq 包装器尝试将 abc 作为标准内置函数或用户定义函数进行匹配,但它无法解析,因此出现错误。

一个JSON字符串(jq需要)类型需要用".."引号来与JSON语法一致。一种方法是使用 --arg 支持通过命令行传递 arg

yq -y -i --arg t "$token" --arg a "$alias" '.tokens += { ($a): { value: $t } }' /root/.github.yml

或者像下面这样乱七八糟的引用,我根本不推荐

yq -y -i '.tokens += { "'"$alias"'": { value: "'"$token"'" }}' /root/.github.yml