【问题标题】:How to insert quotes in jq string interpolation in bash如何在bash中的jq字符串插值中插入引号
【发布时间】:2021-08-26 01:14:24
【问题描述】:

我想使用 jq 来制作 bash 中的可导出变量。我遇到了包含空格的字符串的问题。我尝试修改我的 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"

【问题讨论】:

    标签: json bash environment-variables jq


    【解决方案1】:

    您可以使用@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
      

    【讨论】:

    • 或者更短,to_entries[] | "\(.key)=\(.value|@sh)"
    • 或者,keys[] as $key | "\($key)=\(.[$key]|@sh)"
    • 哦,很好,让我添加这些
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多