Массив Декартово произведение в 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 

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

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 
  • Копирование файла на несколько других файлов с разными именами
  • Unix Shell: назначение массива не работает
  • Как использовать переменную для строки кода скрипта?
  • Усреднение по многим строкам данных
  • Как использовать замещение процесса внутри case-case без получения синтаксических ошибок?
  • Передача аргументов с пробелами и кавычками в скрипт (без цитирования всего)
  • Bash выберите вариант, не нажимая enter.
  • Как построить длинную командную строку?
  • получить первый аргумент CLI после опций в shell scipt
  • Создайте несколько имен пользователей и UID в Linux с помощью сценария оболочки
  • Пространства для переменных в сценарии bash
  • Создание многоадресного соединения для tcpdump-захватов
  • Linux и Unix - лучшая ОС в мире.