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

mot*_*ess 1 bash json environment-variables jq

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

输入:

{
   "PD_TOKEN":"Token y_NbAkKc66ryYTWUXYEu",
   "API":"http://cool.api/",
   "HELP_URL":"https://help.com"
}
Run Code Online (Sandbox Code Playgroud)

jq:

jq -r 'to_entries|map("\(.key)=\(.value|tostring)")' /json
Run Code Online (Sandbox Code Playgroud)

当前结果:

PD_TOKEN=Token y_NbAkKc66ryYTWUXYEu
Run Code Online (Sandbox Code Playgroud)

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

PD_TOKEN="Token y_NbAkKc66ryYTWUXYEu"
Run Code Online (Sandbox Code Playgroud)

Ben*_* W. 8

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

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

此外,没有map

  • 或者更短,`to_entries[] | “\(.key)=\(.value|@sh)”`。 (3认同)