directory/*
é expandido pela primeira shell (normalmente bash). A execução de echo directory/*
fará eco de todos os arquivos correspondentes e o bash classificará primeiro esses elementos lexicograficamente, antes de passá-los como argumentos para echo
, que então os imprime.
No caso de executar ls directory/*
, o directory/*
é primeiro expandido pelo shell e, em seguida, é apresentado como uma lista de argumentos para ls
. A ordenação que o ls
utiliza para produzir os arquivos depende dos argumentos opcionais fornecidos a ele, que permitem a saída da lista de arquivos com base em critérios alternativos, como tamanho, tempo modificado, etc., mas essa classificação é feita internamente no ls
binário em si, depois de ter passado a lista de argumentos expandidos lexicograficamente ordenados do shell bash.