【发布时间】:2014-10-03 09:26:34
【问题描述】:
我需要准备一个简单的脚本来生成存储在变量中的一组元素的所有可能排列,这些元素以 n 个元素为一组(n 个可参数化),想到的最简单的解决方案是使用多个循环,具体取决于组的选定长度。但我认为利用 echo 命令生成组合的能力会更优雅,即
echo {1,2}{1,2}
11 12 21 22
所以使用这种方法,我试图实现一种通用的方法,使用元素列表(例如 {1,2})和元素数量作为输入参数。应该是这样的:
set={1,2,3,4}
group=3
for ((i=0; i<$group; i++));
do
repetition=$set$repetition
done
所以在这种特殊情况下,在循环结束时,重复变量的值是 {1,2,3,4}{1,2,3,4}{1,2,3,4}。但我无法找到使用此变量使用 echo 命令生成组合的方法。我已经尝试了几件事,例如:
echo $repetition
echo $(echo $repetition)
我被困住了,如果有任何提示或帮助,我将不胜感激。
【问题讨论】:
-
对于您的任务,元素的顺序似乎很重要。因此,您正在寻找一种算法来枚举输入的所有 排列。真正在寻找生成组合的算法的人会被这个问题误导。
-
谢谢 Josch,你是对的,我已经根据你的建议对问题进行了修改,以使其更清晰。
标签: bash shell brace-expansion