首页 > 解决方案 > 将 JSON 传递给 bash 脚本

问题描述

我将 JSON 传递给 bash 脚本。JSON 包括固定(已知)键名和来自环境变量的值。

例如:

binary --foo="{\"CYCLE_TIMER_FORCE_MHZ\" : \"$MHZ\"}"

这导致文字调用:

binary --foo={"CYCLE_TIMER_FORCE_MHZ" : "1234"}

如果MHZ1234在环境中。

看看那些丑陋的逃跑。随着这个论点越来越长,它变得越来越烦人。有什么方法可以编写这样的参数,可能包含更多的密钥对,而无需为"需要出现在文字参数值中的每个密钥对做工作?

标签: bashescapingquoting

解决方案


您可以使用此处的文档:

var=$(cat <<EOF
{"CYCLE_TIMER_FORCE_MHZ" : "$MHZ"}
EOF
)

之后,$var包含所需的值:

$ echo "$var"
{"CYCLE_TIMER_FORCE_MHZ" : "1234"}

或者你可以使用 jq:

$ jq -nc --arg v "$MHZ" '{"CYCLE_TIMER_FORCE_MHZ" : $v}'
{"CYCLE_TIMER_FORCE_MHZ":"1234"}

推荐阅读