Por que em bash {{a, b}. {c, d}} se expande para {a.c} {a.d} {b.c} {b.d}

8

No bash %código% se expande para %código% Embora nada seja mencionado para expansão de chave no manual do bash para o tipo de entrada que fiz

Minha pergunta é por que a saída não é assim a.c a.d b.c b.d

    
por Neo_Returns 19.05.2018 / 17:25

1 resposta

11

Em bash , a expansão de {word} é {word} quando a palavra não contém um intervalo ( .. ) ou uma vírgula.

No seu caso, word contém duas expansões de chave. Eles são expandidos da esquerda para a direita, de modo que você obtém, primeiro, {a.{c,d}} {b.{c,d}} e, em seguida, {a.c} {a.d} {b.c} {b.d} , que é o resultado final.

Observe que as chaves externas não são expandidas, pois não contêm um intervalo ou uma 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 em {a,b} {c,d} e depois o esquerdo em a b {c,d} , e finalmente a b c d , que é o resultado final.

Veja também: Por que "cat {foo}" não gera foo, mas "cat {foo, bar}" faz?

    
por 19.05.2018 / 18:13