No bash
echo {{a,b}.{c,d}}
se expande para
{a.c} {a.d} {b.c} {b.d}
Embora nada seja mencionado para expansão de colchetes no manual do bash para o tipo de entrada que fiz
Minha pergunta é por que a saída não é assim ac ad bc bd
No bash
echo {{a,b}.{c,d}}
se expande para
{a.c} {a.d} {b.c} {b.d}
Embora nada seja mencionado para expansão de colchetes no manual do bash para o tipo de entrada que fiz
Minha pergunta é por que a saída não é assim ac ad bc bd
Em
bash
, a expansão de{word}
é{word}
quando a palavra não contém intervalo (..
) ou vírgula.No seu caso
word
, contém duas expansões de colchetes. Eles são expandidos da esquerda para a direita, então você obtém, primeiro{a.{c,d}} {b.{c,d}}
e depois{a.c} {a.d} {b.c} {b.d}
qual é o resultado final.Observe que as chaves externas não são expandidas, pois não contêm um intervalo ou vírgula. Você obteria um resultado semelhante com
@{a,b}.{c,d}@
.Se você tivesse tentado
{{a,b},{c,d}}
, teria três expansões (a expansão é feita em três etapas, cada uma expandindo um conjunto de chaves). Primeiro o externo para dentro{a,b} {c,d}
e depois o esquerdo paraa b {c,d}
, e finalmentea b c d
, que é o resultado final.Veja também: Por que "cat {foo}" não gera foo, mas "cat {foo,bar}" sim?