命令输出被分配给一个变量。有一个例子:
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
。