如何执行字符串替换以在 zsh 中构造 json 字符串?

How to perform string substitution to construct a json string in zsh?

这是我的功能

function print_doc_json() {
    docId=
    echo '{ ":d": { "S": "$(docId)" }}'
}

我希望 print_doc_json abc123 的输出为 { ":d": { "S": "abc123" }}

然而结果是 { ":d": { "S": "$(docId)" }}DocId 未被替换。

如何在已经包含在一对引号中的字符串中进行字符串替换?

有两个错误。首先,变量替换是这样的:${docId},不是这样的:$(docId)

其次,如果您用单引号将字符串括起来 ('),则不会在其中执行任何变量替换 - 您必须使用双引号 (")。请注意,在这种情况下,您必须转义要打印的双引号:

function print_doc_json() {
    docId=
    echo "{ \":d\": { \"S\": \"${docId}\" }}"
}

或者你可以在外面使用单引号,但是你也必须在外面做替换:

function print_doc_json() {
    docId=
    echo '{ ":d": { "S": "'${docId}'" }}'
}

这是三个连接的字符串:'{ ":d": { "S": "'${docId}'" }}'