首页 > 解决方案 > 为 3 个不同的变量创建一个循环以输出所有可能的组合

问题描述

所以可以说我有 3 行代码

ABC
123
!@#

我如何创建一个 for 循环来输出将它们拼凑在一起的方法的数量?

例如ABC123!@#, ABC!@#123, 123ABC!@#$

这是我当前的代码行

 #!/bin/bash



    alphabet='ABC' numbers='123' special='!@#'

 for name in $alphabet$numbers$special 
  do   
  echo $name 
  done  
  echo  done

标签: bashfor-loop

解决方案


您也可以使用大括号扩展完全不使用循环(但您失去了排除的能力,例如ABCABCABC)。例如:

#!/bin/bash

alpha='ABC'
num='123'
spec='!@#'

printf "%s\n" {$alpha,$num,$spec}{$alpha,$num,$spec}{$alpha,$num,$spec}

示例使用/输出

$ bash permute_brace_exp.sh
ABCABCABC
ABCABC123
ABCABC!@#
ABC123ABC
ABC123123
ABC123!@#
ABC!@#ABC
ABC!@#123
ABC!@#!@#
123ABCABC
123ABC123
123ABC!@#
123123ABC
123123123
123123!@#
123!@#ABC
123!@#123
123!@#!@#
!@#ABCABC
!@#ABC123
!@#ABC!@#
!@#123ABC
!@#123123
!@#123!@#
!@#!@#ABC
!@#!@#123
!@#!@#!@#

推荐阅读