You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本中使用AWS CLI --filters变量报错排查

问题原因与解决方案

核心原因

你遇到的问题是Bash字符串变量的参数传递机制导致的:

  • 当用双引号包围"$aws_filter_args"时,Bash会把整个变量内容当作单个完整参数传递给AWS CLI。但--filters需要接收多个独立的键值对参数(Key=tag-key,Values=Environment和Key=tag-value,Values=temp是两个独立的参数部分),这种情况下AWS CLI会把整个字符串解析成错误的选项,从而抛出"Unknown options"错误。
  • 而--profile=source是单个完整参数,用变量传递时双引号不会破坏参数结构,所以能正常工作。

正确解决方案(推荐用数组)

在Bash中,要传递包含多个独立参数的变量,应该用数组来存储,数组会保留每个参数的独立性:

# 用数组存储过滤参数,每个元素对应一个独立的参数部分
aws_filter_args=(--filters Key=tag-key,Values=Environment Key=tag-value,Values=temp)

# 执行命令时展开数组(必须用"${数组名[@]}"格式)
aws secretsmanager --profile=source list-secrets --max-items 10000 "${aws_filter_args[@]}"

"${aws_filter_args[@]}"会将数组中的每个元素作为独立的参数传递给命令,效果和直接在命令行写完整参数完全一致。

临时替代方案(不推荐)

如果不想用数组,可以去掉变量的双引号,让Bash自动拆分参数:

aws_filter_args="--filters Key=tag-key,Values=Environment Key=tag-value,Values=temp"
aws secretsmanager --profile=source list-secrets --max-items 10000 $aws_filter_args

但这种方式有风险:如果参数中包含空格、通配符(比如*)等特殊字符,Bash会错误地拆分或扩展参数,导致命令执行异常,因此优先使用数组方案。

内容的提问来源于stack exchange,提问作者Nimish Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 08:12:11