Создайте цикл для 3 различных переменных, чтобы вывести все возможные комбинации - PullRequest
0 голосов
/ 15 декабря 2018

Допустим, у меня есть 3 строки кода

ABC
123
!@#

Как мне создать цикл for для вывода количества способов собрать их вместе?

EG ABC123!@#, ABC!@#123, 123ABC!@#$

вот моя текущая строка кода

 #!/bin/bash



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

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

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Вы также можете сделать это вообще без цикла, используя расширение скобки (но вы потеряете способность исключать, например, 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
!@#!@#!@#
0 голосов
/ 15 декабря 2018
alphabet='ABC' numbers='123' special='!@#'

for name1 in $alphabet $numbers $special 
#on 1st iteration, name1's value will be ABC, 2nd 123 ...
do
    for name2 in $alphabet $numbers $special
    do
        for name3 in $alphabet $numbers $special
        do
            #here we ensure that we want strings only as combination of that three strings 
            if [ $name1 != $name2 -a $name2 != $name3 ]
            then
            echo $name1$name2$name3
            fi
        done
    done
done 

, если вы хотите также печатать строки, такие как 123123123 и ABCABCABC , удалите, если условие

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...