Как на самом деле анализируются смежные расширения в виде фигурных скобок?

#bash

#bash

Вопрос:

Смежные расширения в виде фигурных скобок приводят к декартову произведению их элементов:

 $ echo {a,b}{c,d}{e,f}
ace acf ade adf bce bcf bde bdf
  

Я хочу знать, является ли это специальной функцией расширений в виде фигурных скобок, или это вытекает из следующего правила или любого другого правила, задокументированного в man bash :

Шаблоны, которые должны быть расширены в виде фигурных скобок, принимают форму необязательной преамбулы, за которой следует либо серия строк, разделенных запятыми, либо выражение последовательности между парой фигурных скобок, за которым следует необязательный postscript. Преамбула имеет префикс к каждой строке, содержащейся в фигурных скобках, а затем к каждой результирующей строке добавляется postscript, разворачивающийся слева направо.

Если это вытекает из этого правила, как именно это работает?

Мне кажется, что вам понадобится отдельное правило, такое как:

Когда преамбула сама по себе является расширением в виде фигурных скобок, каждый элемент расширяется относительно расширения в виде фигурных скобок вправо, а затем эти результаты объединяются в порядке слева направо

То есть {a,b}{c,d} это объединение a{c,d} и b{c,d} .

Но я не вижу ни одного такого правила в man bash описании «Расширений в виде фигурных скобок», которое явно оправдывало бы такое поведение.

Я что-то упускаю?

Комментарии:

1. Я полагаю, что это просто слева направо. {a,b}{c,d}{e,f} это расширение в виде фигурных скобок {a,b} без префикса и приписки {c,d}{e,f} , приводящее к a{c,d}{e,f} b{c,d}{e,f} . Каждое из этих двух расширений в виде фигурных скобок расширяется, что приводит к ac{e,f} ad{e,f} bc{e,f} bd{e,f} , и каждое из этих четырех расширяется до конечного результата ace acf ade adf bce bcf bde bdf .

2. Вероятно, это ответ на ваш вопрос, он довольно подробный: unix.stackexchange.com/questions/402315 /…

3. (Отсутствующим правилом в моей интерпретации было бы то, что расширение в виде фигурных скобок применяется рекурсивно к результату любого расширения в виде фигурных скобок до тех пор, пока не останется выражений в виде фигурных скобок. Это правило в некоторой степени подразумевается тем фактом, что вложенные выражения в виде фигурных скобок явно поддерживаются.)

4. @chepner это все же так? смежные BES не являются вложенными. итак, afaict, требуемое правило отсутствует

5. Я бы сказал, недокументированные , а не недокументированные . Имейте в виду, что bash документация в лучшем случае информативна, определенно не нормативна . Это не должно быть спецификацией.