Por que o eco está combinando alguns arquivos duas vezes?

11
$ touch file{1..12}

$ echo *e{1..12}
file1 file2 file3 file4 file5 file6 file7 file8 file9 file10 file11 file12

$ echo *{1..12}
file1 file11 file12 file2 file3 file4 file5 file6 file7 file8 file9 file10 file11 file12

Eu não entendo porque isso está acontecendo. Por favor, alguém pode explicar?

    
por EmmaV 18.11.2015 / 01:15

1 resposta

21

As chaves não são padrões de caractere curinga. Verifique a documentação das expansões do bash : chaves são expandidas muito cedo no processo, e os padrões de caracteres curinga são expandidos na última etapa¹.

Inicialmente, o comando consiste em duas palavras echo , *{1..12} . Após a expansão da chave, o comando contém 13 palavras: echo , *1 , *2 ,…, *12 . Em seguida, os padrões de curingas são expandidos. *1 é expandido para a lista de nomes de arquivos terminados em 1 , que inclui não apenas file1 mas também file11 (que é classificado posteriormente em ordem lexicográfica). Da mesma forma, *2 expande para file12 e file2 (nesta ordem). Assim, você obtém echo , file1 , file11 , file12 , file2 e os outros curingas que correspondem a um único arquivo: file3 , file4 ,…, file12 .

¹ Além do último, se você seguir a descrição do manual, mas a “remoção de cotação” não é realmente uma coisa - as cotações são analisadas antes do processo de expansão.

    
por 18.11.2015 / 01:22