如何在Bash中循环多个数组生成所有组合的命令?
Bash多数组全组合生成命令的正确写法
先给你指出原代码里的几个关键错误:
- 数组定义时等号两边不能有空格,Bash里变量/数组赋值不允许用空格分隔等号
- 遍历数组的语法错误,
for aa in a只会把字符串"a"作为循环对象,正确遍历数组元素的写法是for aa in "${a[@]}" - 生成命令时的变量引用错误,循环里的
aa已经是数组的单个元素,直接用"$aa"即可,不需要$(aa[@])这种错误写法
修正后的完整代码:
#!/bin/bash a=(1 2 3 4) b=('A' 'B' 'C') c=('x' 'y') for aa in "${a[@]}"; do for bb in "${b[@]}"; do for cc in "${c[@]}"; do # 按你示例的顺序生成命令:command 第二个数组元素 第三个数组元素 第一个数组元素 echo "command $bb $cc $aa" # 如果要实际执行命令,把echo去掉换成真实命令即可 # command "$bb" "$cc" "$aa" done done done
代码说明:
"${a[@]}"会展开数组a的所有元素,且每个元素作为独立项(即使元素包含空格也能正确处理)- 循环嵌套的顺序决定了组合的排列逻辑,你示例里的输出顺序是
b→c→a,所以调整了变量的输出顺序 - 先用
echo打印命令可以验证输出是否符合预期,确认无误后再替换成真实的command执行
如果数组元素可能包含特殊字符(比如空格、引号),一定要用双引号包裹变量("$bb"这种形式),避免解析出错。
内容的提问来源于stack exchange,提问作者StunnerGunnerSG
相关产品推荐
相关产品推荐

