JQ在保存环境变量的同时添加单引号

Rad*_*Rad 2 environment-variables jq

好吧,这可能是一个愚蠢的问题。我有test.json文件:

{
    "timestamp": 1234567890,
    "report": "AgeReport"
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是提取timestampreport值并将它们存储在一些环境变量中:

export $(cat test.json | jq -r '@sh "TIMESTAMP=\(.timestamp) REPORT=\(.report)"')
Run Code Online (Sandbox Code Playgroud)

结果是:

echo $TIMESTAMP $REPORT
1234567890 'AgeReport'
Run Code Online (Sandbox Code Playgroud)

问题是那些单引号会破坏其他命令。我怎样才能摆脱那些单引号?

注意:我将保留已接受的答案,但请参阅@Inian答案以获得更好的解决方案。

Ini*_*ian 5

为什么要使使用变得复杂eval并且引用混乱?而是简单地通过将变量与 NULL ( \u0000)连接来发出变量并在 shell 环境中读取它

{
  IFS= read -r -d '' TIMESTAMP 
  IFS= read -r -d '' REPORT
} < <(jq -r '(.timestamp|tostring) + "\u0000" + .report + "\u0000"' test.json)
Run Code Online (Sandbox Code Playgroud)

这通过使字段由 NULL 分隔符(它不能成为字符串序列的一部分)连接来使您的解析更加健壮。