变量定义中的变量

变量定义中的变量

命令输出被分配给一个变量。有一个例子:

aa=`curl -d '{"foo":42}' -H "Content-Type: <...>" -X POST http://... | some-cmd | other-cmd`

我需要在中参数化一个数字'{"foo":42}'

bb=42

bb并使用 def中的变量aa。以下损坏的示例说明了我需要什么

aa=`curl -d '{"foo":$bb}' -H "Cont ... <and so the same>

如何以正确的方式重写嵌套变量定义?

答案1

单引号阻止 shell 扩展变量。请改为使用双引号。

对于 JSON 中不需要引用的值:

aa=$( curl -d "{\"foo\": $bb}" -H ... )

或者,

aa=$( curl -d '{"foo":'"$bb"'}' -H ... )

如果变量的值需要进行 JSON 编码(某些字符串可能需要),或者如果您想让 JSON 解析器决定值的引用(如果您要发送从外部源读取的数据,通常需要,例如用户输入):

aa=$( curl -d "$( jq -nc --arg val "$bb" '{"foo": $val}' )" -H ... )

或者,分两步,

json=$( jq -nc --arg val "$bb" '{"foo": $val}' )" )
aa=$( curl -d "$json" -H ... )

这用于jq创建 JSON 文档,然后将-d其与 的选项一起使用curl

相关内容