如何用Bash数组传递AWS SSO登录命令的选项?
AWS CLI数组参数正确写法解析
错误根源
你的写法把选项和对应值打包成了单个数组元素(比如'--profile myprofile'),再用"${params[*]}"展开时,Bash会把整个字符串作为一个完整参数传给AWS CLI。这就导致AWS把--profile myprofile识别成一个不存在的长选项,触发报错。
正确实现方式
必须把每个选项和它的值拆分成数组的独立元素,然后用"${params[@]}"展开数组(@会确保每个元素作为单独的命令参数传递):
# 初始化数组:选项与值各自为独立元素 params=('--profile' 'myprofile') # 添加新的选项参数,同样拆分 params+=('--cli-read-timeout' '5') # 执行命令,用@展开数组 aws sso login "${params[@]}"
核心差异说明
${params[*]}:将数组所有元素拼接成单个字符串传递,等价于执行aws sso login "--profile myprofile --cli-read-timeout 5",这会被AWS CLI误判为单个未知选项。${params[@]}:将数组每个元素作为独立命令参数传递,效果和直接手写完整命令aws sso login --profile myprofile --cli-read-timeout 5完全一致。
内容的提问来源于stack exchange,提问作者Floren
相关产品推荐
相关产品推荐

