bash - 将值数组传递给 bash 脚本以用作参数
问题描述
这是我的 bash 脚本中的一个命令。它需要多个 --region 参数,我想传递一个参数数组,例如['us-east-1', 'us-west-1']
custodian run -s out --region us-east-1 --region us-west-1 policy.yml
如何以 bash 脚本循环遍历数组并生成然后插入命令的方式进行--region us-east-1
编码--region us-west-1
?我无法知道数组的大小,它可能是 2 项或 5 项。
我所取得的是将参数传递给 bash 脚本并使用$1
解决方案
这是一种可以做你想做的事情的方法。
仅提取您想要的模式。
echo "['us-east-1', 'us-west-1', 'us-south-1']" | grep -Eo '[[:alnum:]-]+'
输出
us-east-1
us-west-1
us-south-1
如果输入来自.yml
文件
mapfile -t array < <(grep -Eo '[[:alnum:]-]+' policy.yml)
将其保存在数组中mapfile
mapfile -t array < <(echo "['us-east-1', 'us-west-1', 'us-south-1']" | grep -Eo "[[:alnum:]-]+")
--region
在数组中每个元素的前面添加。
"${array[@]/#/--region }"
echo "${array[@]/#/--region }"
输出
-region us-east-1 --region us-west-1 --region us-south-1
添加所有命令
echo custodian run -s out "${array[@]/#/--region }" policy.yml
输出
custodian run -s out --region us-east-1 --region us-west-1 --region us-south-1 policy.yml
这种方法的问题在于两者--region us-west
都是一个论点。
如果这不起作用,您将需要遍历数组并--region
在每个元素上添加。
就像是。
for i in "${array[@]}"; do
options+=(--region "$i")
done
然后一起运行命令。
echo custodian run -s out "${options[@]}" policy.yml
输出
custodian run -s out --region us-east-1 --region us-west-1 --region us-south-1 policy.yml
- 删除
echo
以执行命令而不仅仅是输出到stdout
推荐阅读
- java - 数组长度不同?
- ios - NSNotificationCenter 可以在不同框架之间进行通信吗?
- cmake - 不要展开 CMake 列表变量
- javascript - react-pose 延迟姿势组高度转换,直到孩子之后
- ios - 与 ios 中的 .overFullScreen 演示样式相比,使用 .fullScreen 演示样式的好处
- ios - 如何为未使用的 UI 在 swift 项目中设置 NSLocalizedString?
- c# - 如何从另一个线程访问 WinForms 控件,即与 GUI 线程同步?
- azure - 如何使用 Postman 向 Azure Table REST API 发送查询
- mysql - 使用springboot JPA使用Mysql上传图片
- angular - 如何对依赖服务的组件方法进行单元测试?