如何在搜索中将通配符与环境变量结合起来?
How to combine wildcard(s) with environment variable in search?
是否可以在查询中使用带通配符的环境变量?
鉴于:
LevelA:
levelB:
- sometexthere
- other.value.here
以下查询:
yq eval '.LevelA.levelB.[] | select(. == "*text*")' $file
returns: sometexthere
.
也可以使用环境变量:
A="sometexthere" yq eval '.LevelA.levelB.[] | select(. == env(A) )' $file
到return相同的值:sometexthere
。但是,这有点毫无意义,因为输出与输入变量值相同。
如果通配符与环境变量结合(匹配部分字符串),命令returns nothing:
A=text yq eval '.LevelA.levelB.[] | select(. == "*env(A)*")' $file
是否有另一种方法可以使用环境变量通过 yq 搜索部分字符串?
您不需要 env()
运算符来实现此目的。相反,使用单引号连接查询中的 shell 个变量。
A="text"
yq eval '.LevelA.levelB.[] | select(. == "*'$A'*" )' file.yml
输出:
sometexthere
使用此技术,您可以利用 bash parameter-expansions.
我在 levelB
中添加了 text with space
来演示。
# file.yml
LevelA:
levelB:
- sometexthere
- other.value.here
- text with space
给定变量 A="without space"
,使用替换 ${A/out/}
删除第一次出现的字符串 "out"
。 select
运算符现在将搜索通配符
字符串 "*with space*"
.
A="without space"
yq eval '.LevelA.levelB.[] | select(. == "*'"${A/out/}"'*" )' file.yml
# | | || | || | |
# | | || | || | └> (a.1) end yq query
# | | || | || └> (b) end string
# | | || | |└> (a.2) open yq query (end concat)
# | | || | └> (c) bash double quote
# | | || └> remove the first occurent of "out"
# | | |└> (c) bash double quote
# | | └> (a.2) close yq query (begin concat)
# | └> (b) begin string
# └> (a.1) start yq query
输出:
text with space
是否可以在查询中使用带通配符的环境变量?
鉴于:
LevelA:
levelB:
- sometexthere
- other.value.here
以下查询:
yq eval '.LevelA.levelB.[] | select(. == "*text*")' $file
returns: sometexthere
.
也可以使用环境变量:
A="sometexthere" yq eval '.LevelA.levelB.[] | select(. == env(A) )' $file
到return相同的值:sometexthere
。但是,这有点毫无意义,因为输出与输入变量值相同。
如果通配符与环境变量结合(匹配部分字符串),命令returns nothing:
A=text yq eval '.LevelA.levelB.[] | select(. == "*env(A)*")' $file
是否有另一种方法可以使用环境变量通过 yq 搜索部分字符串?
您不需要 env()
运算符来实现此目的。相反,使用单引号连接查询中的 shell 个变量。
A="text"
yq eval '.LevelA.levelB.[] | select(. == "*'$A'*" )' file.yml
输出:
sometexthere
使用此技术,您可以利用 bash parameter-expansions.
我在 levelB
中添加了 text with space
来演示。
# file.yml
LevelA:
levelB:
- sometexthere
- other.value.here
- text with space
给定变量 A="without space"
,使用替换 ${A/out/}
删除第一次出现的字符串 "out"
。 select
运算符现在将搜索通配符
字符串 "*with space*"
.
A="without space"
yq eval '.LevelA.levelB.[] | select(. == "*'"${A/out/}"'*" )' file.yml
# | | || | || | |
# | | || | || | └> (a.1) end yq query
# | | || | || └> (b) end string
# | | || | |└> (a.2) open yq query (end concat)
# | | || | └> (c) bash double quote
# | | || └> remove the first occurent of "out"
# | | |└> (c) bash double quote
# | | └> (a.2) close yq query (begin concat)
# | └> (b) begin string
# └> (a.1) start yq query
输出:
text with space