如何在Bash脚本中将多个参数存入变量传递给terraform等应用?
问题原因
该问题的核心是使用普通字符串变量存储多个命令参数,Bash在展开未加引号的字符串变量$CMD_ARGS时,无法正确将你拼接的空格识别为参数分隔符,会把整个字符串内容当作单个参数传递给terraform,因此出现将-var-file=a.json -var-file=b.json整体识别为第一个-var-file参数值的报错。
解决方案
改用Bash数组存储命令参数,每个参数作为数组的独立元素,调用命令时通过"${数组名[@]}"的格式展开数组,即可保证参数被正确拆分传递,修改后的代码如下:
VAR_FILES="a.json;b.json" IFS=';' read -ra ADDR <<< "$VAR_FILES" # 声明数组类型的参数变量 declare -a CMD_ARGS for i in "${ADDR[@]}"; do # 逐个将参数追加到数组中 CMD_ARGS+=("-var-file=$i") done # 展开数组传递参数 terraform plan -input=false "${CMD_ARGS[@]}" -out=test.plan
这种方式是Bash中处理多动态参数的标准实践,天然支持参数值带空格、特殊字符的场景,不会出现字符串拼接带来的参数识别错误问题。
内容的提问来源于stack exchange,提问作者Nathan Manzi
相关产品推荐
相关产品推荐

