Массив Декартово произведение в bash

Есть ли способ генерировать декартово произведение массивов без использования петель в bash?

Можно использовать фигурные скобки, чтобы сделать аналогичную вещь:

echo {a,b,c}+{1,2,3} a+1 a+2 a+3 b+1 b+2 b+3 c+1 c+2 c+3 

но мне нужно использовать массивы в качестве входных данных, и самые очевидные трюки не позволяют мне.

  • Открыть окно терминала из сценария
  • Чтобы передать параметр с помощью sed
  • Есть ли способ суммировать размер перечисленных файлов?
  • Локальные переменные в zsh: что эквивалентно «export -n» bash в zsh
  • Как выполнить как зарегистрированный пользователь в скрипте sudo (OSX)?
  • Составить строку IP-адресов с помощью командной строки bash
  • Сортировка STDIN по длине и количеству небилетов в скрипте Bash
  • Извлечь имена файлов со структурой каталога в CSV-файл (отдельный файл csv для каждого имени изображения)
  • One Solution collect form web for “Массив Декартово произведение в bash”

    Вы можете использовать расширение скобки. Но это уродливо. Вам нужно использовать eval , поскольку расширение расширений происходит до расширения переменной (array). И "${var[*]}" с IFS=, для создания запятых.

    Рассмотрим команду для создания строки

     echo {a,b,c}+{1,2,3} 

    Предполагая, что массивы называются letters и numbers , вы можете сделать это, используя нотацию "${var[*]}" с IFS=, чтобы вставлять запятые между элементами вместо пробелов.

     letters=(abc) numbers=(1 2 3) IFS=, echo {"${letters[*]}"}+{"${numbers[*]}"} 

    Какие печатные издания

     {a,b,c}+{1,2,3} 

    Теперь добавьте eval , поэтому он запускает эту строку как команду

     eval echo {"${letters[*]}"}+{"${numbers[*]}"} 

    И вы получаете

     a+1 a+2 a+3 b+1 b+2 b+3 c+1 c+2 c+3 
    Interesting Posts
    Linux и Unix - лучшая ОС в мире.