Jim Asked: 2018-06-06 03:16:57 +0800 CST2018-06-06 03:16:57 +0800 CST 2018-06-06 03:16:57 +0800 CST 在单引号内插值 772 我有以下内容: COMMENT="A random comment" TEXT_JSON='{"person" : "Jim","comment" : "$COMMENT"}' echo "$TEXT_JSON" | jq . 这打印 { "person": "Jim", "comment": "$COMMENT" } 这不是我想要的。如何在此处插入字符串? string quoting 2 个回答 Voted Best Answer rusty shackleford 2018-06-06T03:52:55+08:002018-06-06T03:52:55+08:00 您不能在单引号内插入。 您可以将字符串放在双引号中,然后转义文字双引号: COMMENT="A random comment" TEXT_JSON="{\"person\" : \"Jim\",\"comment\" : \"$COMMENT\"}" echo $TEXT_JSON | jq . { "person": "Jim", "comment": "A random comment" } 或者,您可以保留单引号,这样您就不必转义任何内容,但在变量之前结束单引号,然后对变量使用双引号,然后在字符串的最后部分使用单引号: TEXT_JSON='{"person" : "Jim","comment" : "'"$COMMENT"'"}' Kusalananda 2021-07-12T09:54:15+08:002021-07-12T09:54:15+08:00 Shell 变量永远不会在 shell 中以单引号字符串扩展。 要使用来自 shell 变量的数据创建 JSON 文档,请使用 JSON 感知工具,例如jq或jo。这确保了数据被充分编码以防止包含在文档中。在 JSON 文档中扩展 shell 变量不是您想要做的。 使用jq: comment='Some comment from "Random User"' jq -n --arg comment "$comment" '{ "person": "Jim", "comment": $comment }' 使用jo: comment='Some comment from "Random User"' jo person=Jim comment="$comment" 这两者都创建了等效的 JSON,可以表示为 { "person": "Jim", "comment": "Some comment from \"Random User\"" } 请注意双引号是如何自动处理的。
您不能在单引号内插入。
您可以将字符串放在双引号中,然后转义文字双引号:
或者,您可以保留单引号,这样您就不必转义任何内容,但在变量之前结束单引号,然后对变量使用双引号,然后在字符串的最后部分使用单引号:
Shell 变量永远不会在 shell 中以单引号字符串扩展。
要使用来自 shell 变量的数据创建 JSON 文档,请使用 JSON 感知工具,例如
jq
或jo
。这确保了数据被充分编码以防止包含在文档中。在 JSON 文档中扩展 shell 变量不是您想要做的。使用
jq
:使用
jo
:这两者都创建了等效的 JSON,可以表示为
请注意双引号是如何自动处理的。