在下面的 jq 脚本中,我想要打印 和 的连接first_name
或者last_name
仅仅last_name
。
$ echo '{"first_name": "John", "last_name": "Johnson"}' | jq -c '{
"name": (if (.last_name | startswith(.first_name))
then .last_name
else .first_name + " " + .last_name
end)
}'
错误是
jq: error (at <stdin>:1): Cannot index string with string "first_name"
jq 命令在调用startswith
- 时失败,好像startswith
只接受字符串文字。如果我更改startswith(.first_name)
为startswith("John")
,则表达式将编译并按预期工作。
在现实世界的例子中,有许多输入记录和许多不同的first_name
s。有什么方法可以插入.first_name
吗startswith
?
您使用
startswith
得对,但使用前述内容,您正在启动一个不再有效的|
新上下文(保存的值.last_name
) 。.first_name
一般来说,为了在稍后的时间(当它脱离上下文时)引用某个值,请在它仍在上下文中时将一个变量绑定到它,然后在稍后使用它:
您也可以在早期阶段绑定整个对象(例如,如果您碰巧需要对它或其部分的多个引用):
或者定义自己的带有两个参数的函数(例如,如果您更频繁地需要这种构造):