Função
Eles significam coisas diferentes. O asterisco corresponde a zero a caracteres infinitos. O ponto de interrogação corresponde exatamente a um caractere.
Das referências acima:
The * character serves as a "wild card" for filename expansion in globbing.
The ? character serves as a single-character "wild card" for filename expansion in globbing…
Desempenho
tl: dr: não há diferença detectável no desempenho.
Eu testei o desempenho usando um diretório preenchido com 36 subdiretórios, cada um nomeado com um único caractere. Havia cerca de 70 000 arquivos nos subdiretórios combinados. Eu testei o seguinte.
$ time ls ?/* -d >/dev/null
$ time ls */* -d >/dev/null
Eu alternei cada comando dez vezes cada. Aqui estão os resultados para o real
tempo, em segundos.
? *
0.318 0.326
0.355 0.212
0.291 0.351
0.291 0.265
0.287 0.283
0.362 0.23
0.248 0.33
0.286 0.283
0.293 0.351
0.233 0.352
Após análise estatística (teste t pareado, bicaudal), não consegui detectar diferença entre os dois valores no desempenho (valor p = 0,95).
EDIT:Maisamostras
Repetiaanáliseacimacom200amostrascada,alternandonovamenteostestes.
$foriin{1..200};dotime(ls*/*-d>/dev/null)2>>/tmp/time_asterisk;time(ls?/*-d>/dev/null)2>>/tmp/time_question_mark;done
Aquiestãoosdadosbrutospara