A expansão de suporte não funciona com menos de 2 argumentos

4

Eu esperava que a expansão de chaves funcionasse para qualquer número de argumentos. No entanto, para n = 1, recebo o seguinte:

$ find models/nsf-projects-{7}*
models/nsf-projects-{7}.rdf

Para a expansão n > 1 ocorre como esperado, por exemplo:

$ find models/nsf-projects-{6,7}*
find: ‘models/nsf-projects-6*’: No such file or directory
find: ‘models/nsf-projects-7*’: No such file or directory

Eu consultei os manuais GNU um pouco, mas não encontrei o requisito para os argumentos > 1 declarados explicitamente em qualquer lugar.

P: É n > 1 de fato um requisito para a expansão de contraventamentos? Se sim, por que é útil?

    
por Wouter Beek 15.09.2014 / 08:20

2 respostas

8

Sim, n > 1 é um requisito explícito :

A correctly-formed brace expansion must contain unquoted opening and closing braces, and at least one unquoted comma or a valid sequence expression. Any incorrectly formed brace expansion is left unchanged.

Quanto ao porquê - razões históricas, até certo ponto (embora tenha sido copiado de csh originalmente, que tem o outro comportamento). Existem comandos que usam {} como argumento literal ( find , parallel , e outros com argumentos mais complexos), e também outros usos de {} no idioma da shell. Como as expansões de chaves são processadas apenas quando escritas literalmente (e não a partir de variáveis), não há realmente nenhuma motivação para suportar expansões degeneradas e algumas razões para não fazê-lo.

    
por 15.09.2014 / 08:29
5

man bash states (ênfase adicionada):

A correctly-formed brace expansion must contain unquoted opening and closing braces, and at least one unquoted comma or a valid sequence expression. Any incorrectly formed brace expansion is left unchanged.

Esse também é o quinto parágrafo na seção Expansão de órtese do manual do bash.

Eu só posso especular sobre a motivação, mas eu suspeito que foi para permitir que você digite coisas que contêm {...} sem as chaves desaparecendo. (Isso se aplica aos operadores de repetição de expressões regulares, para dar apenas um exemplo).

    
por 15.09.2014 / 08:28