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

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

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

  • Есть ли удобный инструмент командной строки для управления заданиями Cron?
  • Расширение брекета не работает в скрипте
  • Как сделать несколько подстрок сразу заменить в bash?
  • Bash - расширение параметра для переменной с ведущим пробелом
  • Почему man statfs 'FUTEXFS_SUPER_MAGIC равен плохим идеям (0xBAD1DEA)?
  • Установите псевдоним на оболочку Bourne
  • 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 

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

  • dhcp: способ проверки состояния онлайн-устройства
  • Безопасное извлечение usb из устройства linux
  • Почему мой DAD медленный?
  • Пользователь Admin не показывает путь к папке в консольной строке, только $
  • Каковы параметры командной строки systemd «--switched-root» и «--deserialize»?
  • Как получить список всех активных X-сессий и их владельцев
  • 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 
    Linux и Unix - лучшая ОС в мире.