Por que o eco corresponde a 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

Não entendo por que isso está acontecendo. Por favor, alguém pode explicar?

EmmaV
fonte

Respostas:

21

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

Inicialmente, o comando é composto por duas palavras echo, *{1..12}. Após a expansão cinta, o comando contém 13 palavras: echo, *1, *2, ..., *12. Em seguida, os padrões curinga são expandidos. *1expande para a lista de nomes de arquivos terminados em 1, que inclui não apenas file1mas também file11(que são classificados posteriormente em ordem lexicográfica). Da mesma forma, *2expande para file12e file2(nesta ordem). Então você começa echo, file1, file11, file12, file2, e depois os outros curingas que correspondeu a um único arquivo: file3, file4, ..., file12.

¹ Por último, se você seguir a descrição do manual, mas a "remoção de cotação" não for realmente uma coisa - as cotações serão analisadas antes do processo de expansão.

Gilles 'SO- parar de ser mau'
fonte