![如何从多字(空格分隔)bash 变量构造 JSON 对象?](https://linux22.com/image/162347/%E5%A6%82%E4%BD%95%E4%BB%8E%E5%A4%9A%E5%AD%97%EF%BC%88%E7%A9%BA%E6%A0%BC%E5%88%86%E9%9A%94%EF%BC%89bash%20%E5%8F%98%E9%87%8F%E6%9E%84%E9%80%A0%20JSON%20%E5%AF%B9%E8%B1%A1%EF%BC%9F.png)
我有一个小型 bash 脚本,它使用 jq 从用户输入构造 JSON 对象。不幸的是,我无法说服 jq 接受多字变量作为其键之一的值。
以下是 bash 提示符中的等效示例:
没有空格 jq 按我的预期工作:
$> value="Input"
$> jq -n --arg value $value '{"key": ($value)}'
返回:
{
"key": "Input"
}
但它会破坏多字值:
$> value="A multi word input"
$> jq -n --arg value $value '{"key": ($value)}'
返回错误:
jq: error: multi/0 is not defined at <top-level>, line 1:
multi
jq: 1 compile error
有什么魔力可以说服 jq 不会被 $value 的空白区域噎住呢?
答案1
您未引用的内容$value
会受到 shell 的分词 - 答案只是简单地引用它:
$ jq -n --arg value "$value" '{"key": ($value)}'
{
"key": "A multi word input"
}
也可以看看