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

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

  • Является ли `bash --posix` необходимым для bash 4, когда передается опция` set` для подсетей?
  • Нужна помощь с скриптом оболочки, используемым для работы cron
  • скрипт для сканирования диапазона ip и возврата результатов в определенном формате
  • Bash для вызова PHP, дождитесь завершения процесса PHP?
  • Заявка на обслуживание в Centos 7
  • Почему `du -sh *` жалуется на недопустимые параметры?
  • Как тайм-аут по часам в Bash (и сохранить тайм-аут, даже если сессия была закрыта)?
  • YAD и Zenity - ввод времени начала / остановки для обрезания видео
  • 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 - лучшая ОС в мире.