在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
相关产品推荐
相关产品推荐

