如何在 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
我打算在 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