如何在 bash 中的 jq 字符串插值中插入引号

How to insert quotes in jq string interpolation in bash

我打算在 bash 中使用 jq 生成可导出变量。我 运行 遇到了包含空格的字符串的问题。我尝试修改我的 jq 但我得到的只是无效字符错误。我试过单引号或双引号,但都不适合我。我在这里错过了什么?

输入:

{
   "PD_TOKEN":"Token y_NbAkKc66ryYTWUXYEu",
   "API":"http://cool.api/",
   "HELP_URL":"https://help.com"
}

jq:

jq -r 'to_entries|map("\(.key)=\(.value|tostring)")' /json

当前结果:

PD_TOKEN=Token y_NbAkKc66ryYTWUXYEu

想要的结果(注意引号):

PD_TOKEN="Token y_NbAkKc66ryYTWUXYEu"

您可以使用 @sh 而不是 tostring 来安全地转义 shell:

$ jq -r 'to_entries | map("\(.key)=\(.value|@sh)")[]' infile.json
PD_TOKEN='Token y_NbAkKc66ryYTWUXYEu'
API='http://cool.api/'
HELP_URL='https://help.com'

另外,没有map

  • 第一步使用数组迭代器(h/tip oguz ismail):

    jq -r 'to_entries[] | "\(.key)=\(.value|@sh)"' infile.json
    
  • 迭代键(h/tip ikegami):

    jq -r 'keys[] as $key | "\($key)=\(.[$key]|@sh)"' infile.json