创建 N 个数组中所有可能组合的数组

创建 N 个数组中所有可能组合的数组

我有一个脚本可以运行另一个 bash 脚本可选参数,例如:

./my_script.sh --param_1 <value> --param_2 <value> ... --param_N <value>

在我的主要脚本中,我希望具有每个可能值的数组参数,例如:

PARAM_1_VALS=(1 10 50)
PARAM_2_VALS=(50 10 20)
PARAM_N_VALS=("a" "b" "c")

我想知道是否有任何函数,给定一个数组数组,返回这些数组中所有可能的组合(例如:(1 50 "a"), (1 50 "b"), ..., (50 20 "c"))

所需的脚本将是:

all_combinations=get_all_combinations(params_array)
for combination in ${all_combinations[@]}; do
   #execute my_script.sh with combination
done

我当前的解决方案表现不佳,因为我只是迭代嵌套循环中的所有数组以获取所有值。我想删除嵌套循环并寻找更好的方法。

ps:我正在寻找的与python的itertools.combinations()解决方案非常相似

谢谢

答案1

您可以使用大括号扩展,但它仅适用于文字值,即您不能在大括号内使用变量。

for c in --param1\ {1,10,50}\ --param2\ {50,10,20}\ --param3\ {a,b,c} ; do
    echo "$c"
done

相关内容