【问题标题】:Escape quotes in jqjq中的转义引号
【发布时间】:2017-06-13 08:23:54
【问题描述】:

我有以下两条 bash 行

TMPFILE="$(mktemp)" || exit 1

< package.json jq '. + {"foo":'"${BOO}"'}' > "$TMPFILE"

但我收到以下错误:

jq: error: syntax error, unexpected '}' (Unix shell quoting issues?) at <top-level>, line 1:
. + {"foo":}
jq: 1 compile error

知道如何通过在此处添加双引号以使 shellcheck 错误静音来正确转义该部分

【问题讨论】:

  • 变量BOO的内容是什么? - 好的,它是空的,所以语法错误,因为 jq 命令中没有引号(引号是此命令中 bash 的语法,除了 foo 周围的引号)

标签: bash shell jq


【解决方案1】:

只需使用一个变量就可以省去麻烦:

< package.json jq --arg b "$BOO" '. + { foo: $b }'

--arg b "$BOO" 创建一个变量$b,您可以在jq 中使用它,而无需处理引用问题。

也就是说,您的尝试失败的原因是您缺少一些文字双引号:

< package.json jq '. + { foo: "'"$BOO"'" }'

额外的双引号inside命令的每个单引号部分都是必需的,因为在将命令字符串传递给jq之前,其他部分由shell消耗。

如果 shell 变量包含任何引号,这仍然会失败,因此第一种方法是首选方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多