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

使用yq处理YAML时如何保留值的引号避免Bash环境变量截断?

解决YAML读取环境变量时含空格值被截断的问题

问题重现

配置文件 config.yaml

APP_ID: APP158
APP_NAME: "My Application"

处理脚本 process-config.sh

#!/bin/bash

export $(yq e "to_entries | map(.key + \"=\" +  .value) | join(\" \")" config.yaml)

echo $APP_ID
echo $APP_NAME

执行脚本后输出如下:

APP158
My

可以看到APP_NAME的值因包含空格被截断,只输出了My,该如何解决?

解决方案

修改后的脚本如下:

#!/bin/bash

eval $(yq e 'to_entries | map(.key + "=\"" + .value + "\"") | join(" ")' config.yaml)

echo "$APP_ID"
echo "$APP_NAME"

说明

  1. 调整yq输出格式:把yq的处理逻辑改成生成KEY="VALUE"的格式,给每个变量值加上双引号,让带空格的内容被完整包裹,比如生成APP_NAME="My Application"。
  2. 改用eval执行:直接用export $(...)时,Bash会把空格当作变量分隔符,引号会被当作普通字符忽略;用eval可以让Bash正确解析带引号的赋值语句,保留变量值里的空格。
  3. 输出变量加引号:echo "$APP_NAME"能确保输出时变量的完整值被打印,不会因为空格再次被拆分。

执行修改后的脚本,输出会变成:

APP158
My Application

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 02:12:26