理解 `jq` 中的 `--arg` 和 `--argjson`
在使用 jq
处理 JSON 数据时,我们常常需要从命令行传递变量。jq
提供了两个选项:--arg
和 --argjson
,它们用于不同类型的数据。本文介绍这两个选项的区别以及如何正确使用它们。
--arg
与 --argjson
1. 使用 --arg
-
用途:传递字符串值。
-
行为:传递的值被视为字符串,并在
jq
输出的结果中加上引号。 -
示例:
jq -n --arg name "张三" '{ "name": $name }'
输出结果为:
{ "name": "张三" }
2. 使用 --argjson
-
用途:传递数字、数组或对象等 JSON 值。
-
行为:传递的值被视为原始 JSON,不会加上引号。
-
示例:
jq -n --argjson age 30 '{ "age": $age }'
输出结果为:
{ "age": 30 }
如何选择
- 如果值是字符串,使用
--arg
。 - 如果值是数字或其他 JSON 类型,使用
--argjson
。
再来个复杂点的例子
jq -n --arg a "Hello" --argjson b 42 '($a + ($b | tostring))'
在这个例子中,字符串 "Hello"
和数字 42
被拼接成 "Hello42"
(带引号的字符串),因为我们将数字转换为字符串后再进行连接。