如何在kubectl中使用变量作为jsonpath参数
解决Shell脚本中kubectl jsonpath变量传递问题
你的问题出在引号嵌套错误和参数传递时未正确引用变量,以下是修正后的代码:
check_deprecating_api() { echo "Search for to be soon deprecated API" # 用单引号构建完整查询语句,避免Shell解析引号冲突 local API_REQUESTS_QUERY='{range .items[?(@.status.removedInRelease=="1.25")]}{.status.removedInRelease}{" "}{.status.requestCount}{" "}{.metadata.name}{" "}{end}' echo "$API_REQUESTS_QUERY" # 用双引号包裹变量,确保kubectl接收完整的jsonpath语句 kubectl get apirequestcounts -o jsonpath="$API_REQUESTS_QUERY" }
关键修正点:
- 原代码拼接字符串时,外层单引号内部的
=="1.25"双引号未做处理,导致Shell提前截断字符串,变量内容不完整。直接用单引号包裹整个jsonpath语句,内部双引号会被当作普通字符保留,无需额外转义。 - 调用kubectl时必须用双引号包裹
$API_REQUESTS_QUERY,否则Shell会把查询中的空格、制表符当作参数分隔符,kubectl无法识别完整的jsonpath规则。
动态版本号扩展(可选)
如果需要动态替换版本号,可通过变量拼接实现:
check_deprecating_api() { local target_version="1.25" echo "Search for APIs deprecated in $target_version" local API_REQUESTS_QUERY='{range .items[?(@.status.removedInRelease=="'"$target_version"'")]}{.status.removedInRelease}{" "}{.status.requestCount}{" "}{.metadata.name}{" "}{end}' kubectl get apirequestcounts -o jsonpath="$API_REQUESTS_QUERY" }
内容的提问来源于stack exchange,提问作者elmazzun
相关产品推荐
相关产品推荐

