首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Bash变量替换为yq命令

将Bash变量替换为yq命令
EN

Unix & Linux用户
提问于 2023-03-13 11:47:07
回答 2查看 801关注 0票数 1

给定YAML文件,example.yaml

代码语言:javascript
复制
node:
  sub_node:
    get_this:

我想使用Mike的get_this和字符串sub_node获得一个包含D4的变量

代码语言:javascript
复制
yaml="$(cat example.yaml)"
nodename=sub_node
sub_yaml= "$(echo "$yaml" | yq -r '.$nodename' )";
# also tried -> sub_yaml= "$(echo "$yaml" | yq -r '.'"$nodename" )";

注意,这是一个人为的例子,实际上,sub_node字符串是事先不知道的,所以我需要替换$nodename字符串。

我似乎不知道如何摆脱yq所需的单引号查询字符串。

我该怎么做?

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2023-03-13 13:45:16

使用迈克·法拉赫yq,您可以将nodename shell变量的值作为路径的一部分,通过使用env()函数从实用程序的环境访问它,如下所示:

代码语言:javascript
复制
$ nodename='sub_node' yq '.node[env(nodename)]' example.yaml
get_this:

这将访问由node环境变量的值提供的顶级nodename键的分段。

这避免了将shell变量的值注入到yq表达式中,这意味着您可以访问具有点和其他特殊字符的节。

使用安德烈·基斯柳克yq,可以通过内部变量传递子键来完成类似的事情,如下所示:

代码语言:javascript
复制
$ nodename=sub_node
$ yq -y --arg sect "$nodename" '.node[$sect]' example.yaml
get_this: null

..。或者通过阅读环境的价值,

代码语言:javascript
复制
$ nodename=sub_node yq -y '.node[$ENV.nodename]' example.yaml
get_this: null
票数 3
EN

Unix & Linux用户

发布于 2023-03-13 13:16:11

正如ikkachu的评论所述,我应该使用双引号。

具有讽刺意味的是,由于我在=之后的空间,我的尝试和错误都没有起作用。

我还必须更正上面示例的查找字符串:

代码语言:javascript
复制
nodename=node.sub_node
sub_yaml="$(echo "$yaml" | yq -r ".$nodename" )";
echo $sub_yaml
get_this:
票数 -1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/739589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档