如何用jq提取configMapRef的name值并存入Bash数组
解决方案
1. 修正jq命令提取configMapRef的name值
你当前的jq命令已经筛选出包含configMapRef的对象,只需追加.configMapRef.name即可直接提取name属性,同时加上-r参数输出原始字符串(不带JSON引号),方便后续Bash处理:
jq -r '.spec.template.spec.containers[].envFrom[] | select(.configMapRef) | .configMapRef.name' file.json
2. 将提取结果存入Bash数组
使用Bash的mapfile命令(别名readarray)可以将命令输出的每一行直接存入数组,避免空格或特殊字符导致的拆分问题:
# 提取并存入数组 mapfile -t config_map_names < <(jq -r '.spec.template.spec.containers[].envFrom[] | select(.configMapRef) | .configMapRef.name' file.json)
3. 遍历数组使用
存入数组后,可通过循环遍历每个name值:
for name in "${config_map_names[@]}"; do echo "处理ConfigMap: $name" # 这里添加自定义业务逻辑,例如 kubectl get configmap "$name" done
兼容低版本Bash的替代方案
如果你的Bash版本低于4.0(不支持mapfile),可以用传统的while循环替代:
config_map_names=() while IFS= read -r name; do config_map_names+=("$name") done < <(jq -r '.spec.template.spec.containers[].envFrom[] | select(.configMapRef) | .configMapRef.name' file.json)
内容的提问来源于stack exchange,提问作者Jananath Banuka
相关产品推荐
相关产品推荐

