You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Bash中使用Mike Farah的yq,用变量指定数组索引访问YAML出错怎么办?

问题解决方法

你的问题出在yq对环境变量的引用方式错误,直接写$i无法让yq识别到你设置的环境变量,此时$i会被当作空值处理,.[null]的写法会返回整个数组,这就是你得到全部内容的原因。

针对Mike Farah的yq(v4及以上版本),正确的操作方式有两种:

方式一:通过env()函数引用环境变量

先设置环境变量,再执行命令:

# 设置环境变量i=2
i=2
# 用env(i)引用变量
yq '.[env(i)]' test.yaml

执行后就能得到预期的charlie。

方式二:通过--arg参数传递变量(更推荐)

这种方式不需要依赖环境变量,直接在命令行传递参数,注意要把字符串类型的参数转为数字索引:

yq --arg i 2 '.[$i | tonumber]' test.yaml

这里的tonumber是必须的,因为--arg传递的参数默认是字符串类型,转成数字才能作为数组索引使用。

补充说明:yq的数组索引是从0开始计数的,你要的charlie是第3个元素,对应索引2,这个逻辑是正确的。

内容的提问来源于stack exchange,提问作者wwillfred

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 02:14:29