bash - 如何将多个参数作为变量传递给应用程序?
问题描述
我需要遍历一个变量并生成多个参数,以便稍后在 bash 脚本中传递给命令。
例子:
VAR_FILES="a.json;b.json"
IFS=';'
read -ra ADDR <<< "$VAR_FILES"
CMD_ARGS=""
for i in "${ADDR[@]}"; do
CMD_ARGS="$CMD_ARGS-var-file=$i "
done
terraform plan -input=false $CMD_ARGS -out=test.plan
我希望上面的内容可以与 terraform 命令一起使用,但是该命令将变量作为单个参数读取,如下面的错误消息中所反映。
user@local:~/test/$ terraform plan -input=false $CMD_ARGS -out=test.plan
╷
│ Error: Failed to read variables file
│
│ Given variables file "a.json" -var-file="b.json" does not exist.
╵
它成功读取了前导-var-file=
文件名和第一个文件名,但随后将变量的其余部分作为第一个-var-file
参数的一部分读取。
解决方案
IFS=';'
更改脚本其余部分的字段间分隔符,这会弄乱分词。如果您将其添加到read
调用中,那么它将仅对该命令有效。
您还可以使用数组来正确存储多个单词并完全避免单词拆分。
var_files="a.json;b.json"
IFS=';' read -ra addrs <<< "$var_files"
cmd_args=()
for addr in "${addrs[@]}"; do
cmd_args+=(-var-file="$addr")
done
terraform plan -input=false "${cmd_args[@]}" -out=test.plan
我还将所有变量名都转换为小写。所有大写名称都保留给 shell。最好为您自己的变量使用小写,以免与内置变量发生冲突。
推荐阅读
- python - 我能够在 heroku 上构建我的 django web 应用程序,但是在启动它时显示这些错误(错误日志如下所示)
- java - java.lang.LIKE_FOR_NO_REASON.ArrayIndexOutOfBoundsException
- laravel - 如何解决 Laravel 中的自动注销问题
- python - 无法使用 XPATH 在 Facebook 中找到搜索栏元素
- ipython - 有人可以解释一下“!”是怎么做的吗?和“%%”命令在 python 中工作?
- swift - MCBrowserViewController 不应该在浏览器中收到此回调消息?
- docker - 不能在之前安装过的 docker 容器中使用 curl
- html - 在其父元素的中间垂直显示一个元素
- encoding - 无法将带有西里尔数据的 csv 文件上传到谷歌数据工作室 - 编码 utf-8 错误
- git - 我可以用它的前辈之一压缩合并提交吗?