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

如何在Bash中判断指定值是否存在于YAML文件的对应数组字段中

实现方案

前置依赖

你需要提前安装yq(推荐mikefarah/yq v4及以上版本,目前主流Linux发行版可直接通过包管理器安装),处理HTTP路径时还需要系统自带的curl工具。


实现思路

  • 先判断输入的YAML路径类型:如果是http/https开头的路径就用curl拉取内容,否则直接读取本地文件
  • 用yq提取thatyamlkey数组,判断是否包含目标值key2
  • 根据判断结果走对应逻辑:存在就执行自定义操作,不存在返回exit 1

可直接使用的脚本示例

#!/bin/bash
# 配置变量,可根据实际需求修改
YAML_PATH="替换为你的yaml路径,支持本地路径或http/https链接"
TARGET_KEY="key2"
YQ_QUERY=".thatyamlkey[] | select(. == \"${TARGET_KEY}\")"

# 第一步:获取YAML内容
if [[ $YAML_PATH =~ ^https?:// ]]; then
    # 处理远程HTTP路径
    yaml_content=$(curl -s "${YAML_PATH}")
    if [ $? -ne 0 ]; then
        echo "拉取远程YAML文件失败"
        exit 1
    fi
else
    # 处理本地文件路径
    if [ ! -f "${YAML_PATH}" ]; then
        echo "本地YAML文件不存在"
        exit 1
    fi
    yaml_content=$(cat "${YAML_PATH}")
fi

# 第二步:判断数组是否包含目标值
match_count=$(echo "${yaml_content}" | yq eval "${YQ_QUERY}" | wc -l)
if [ "${match_count}" -ge 1 ]; then
    echo "找到目标值${TARGET_KEY},执行指定操作"
    # 此处替换为你需要执行的自定义操作即可
else
    echo "未找到目标值${TARGET_KEY}"
    exit 1
fi

补充说明

  • 如果你使用的是Python版本的yq,只需把脚本中的yq eval改成yq -r即可,查询语法通用
  • 上述脚本兼容数组存在重复值的场景,只要匹配到至少1个目标值就会走存在逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:27:02