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

如何在Shell脚本中读取YAML文件中的特定数据

从YAML文件中提取特定键值到Shell变量的方案

在Shell脚本里处理YAML文件,不推荐用awk/sed这类文本工具硬匹配——YAML的缩进、注释、嵌套结构很容易让正则失效。最稳妥的方式是用专门的YAML处理工具,比如yq,下面给你两种可行的实现方式:

方案一:使用yq(推荐,精准可靠)

yq是YAML版本的jq,专门用来处理YAML/JSON数据,语法直观且能完美适配YAML的结构。

1. 安装yq

  • Ubuntu/Debian系统:sudo apt install yq
  • macOS系统:brew install yq
  • 其他系统可以从官方仓库下载二进制包

2. 脚本实现

#!/bin/bash

# 提取test.config.abc和test.config.xyz的值
var1=$(yq '.test.config.abc' test.yaml)
var2=$(yq '.test.config.xyz' test.yaml)

# 验证变量(可选)
echo "var1 = $var1"
echo "var2 = $var2"

说明:yq的语法和jq一致,.test.config.abc就是直接定位到目标键,完全不受文件中其他无关内容的影响,哪怕YAML结构有嵌套变化(只要目标键的路径不变),脚本依然能正常工作。

注意:如果你的yq是v3版本(旧版),语法会略有不同,需要写成:

var1=$(yq r test.yaml test.config.abc)
var2=$(yq r test.yaml test.config.xyz)

方案二:使用awk(应急方案,仅适用于格式严格的YAML)

如果无法安装yq,可以用awk做临时提取,但要求你的YAML格式完全固定(比如abc:和xyz:前面的空格数必须和示例一致,没有注释干扰):

#!/bin/bash

# 匹配特定缩进下的abc和xyz字段
var1=$(awk '/^    abc: / {print $2}' test.yaml)
var2=$(awk '/^    xyz: / {print $2}' test.yaml)

echo "var1 = $var1"
echo "var2 = $var2"

局限性:如果YAML的缩进改变、目标字段有注释、或者值是多行/特殊字符,这个方法会直接失效,所以仅作为应急使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 19:07:34