Bash脚本中jq的--arg参数未生效及大小写匹配问题排查
问题排查与解决:Bash脚本中jq参数传递失效及大小写匹配问题
一、jq参数传递失效的原因与修复
你在jq的contains("$e")里把变量$e放在了双引号中,这会让jq将其解析为字面量字符串"$e",而不是你通过--arg传入的变量值——这就是脚本中参数不生效的核心原因。
修正后的代码只需去掉$e周围的双引号即可:
#!/bin/bash ACCOUNT=123456789 ENTITY=$1 DASHBOARDS=$(aws quicksight list-dashboards --aws-account-id ${ACCOUNT} | jq -r --arg e "$ENTITY" '.DashboardSummaryList[] | select(.Name|contains($e)) | .DashboardId')
二、大小写匹配问题的优化处理
你的大小写转换逻辑可以简化,无需调用echo和tr,直接利用Bash内置的参数展开功能就能完成,更高效简洁:
# 先将输入转为全小写 ENTITY=${1,,} # 处理特殊例外 if [[ "$ENTITY" == "uk" || "$ENTITY" == "exception2" ]]; then ENTITY=${ENTITY^^} # 转为全大写 else ENTITY=${ENTITY^} # 首字母大写,其余小写 fi
内容的提问来源于stack exchange,提问作者Marius
相关产品推荐
相关产品推荐

