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

使用yq v4读取YAML中PEM密钥时如何保留末尾换行符?

解决Bash中用yq v4读取PEM密钥并保留末尾换行的问题

方法1:使用read -d ''读取输出

Bash的$()会自动移除命令输出末尾的换行符,但可以用read命令结合进程替换完整保留所有内容(包括末尾换行):

# 假设YAML文件为config.yaml,目标字段为.tls.privateKey
read -d '' pem_key < <(yq eval '.tls.privateKey' config.yaml)

原理

  • read -d ''会持续读取输入直到遇到空字符,而yq的输出默认不包含空字符,因此会读取完整的输出流。
  • 进程替换<()会完整传递yq的输出字节,包括末尾的换行符,不会被截断。

方法2:利用参数扩展补回末尾换行

如果更习惯用$()赋值,可以通过添加特殊标记再移除的方式保留换行:

# 读取时追加一个非换行特殊字符,再移除该字符
pem_key=$(yq eval '.tls.privateKey' config.yaml; printf '\x01')
pem_key=${pem_key%$'\x01'}

原理

  • printf '\x01'添加一个不会被$()识别为末尾换行的特殊字符,避免原始换行被移除。
  • ${pem_key%$'\x01'}用参数扩展去掉最后添加的特殊字符,还原包含末尾换行的原始PEM内容。

验证换行是否保留

可以用以下命令确认变量是否正确保留了末尾换行:

# 统计变量的总字符数(包含末尾换行)
echo -n "$pem_key" | wc -c
# 查看变量的转义形式,确认末尾存在\n
printf "%q\n" "$pem_key"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:05:32